fixed the invalid memory access issue in moo_compucharsucstr() and similar functions.

added the log.default_type_mask field 
restructured the builtin primitive function table
This commit is contained in:
hyunghwan.chung
2017-12-31 16:46:52 +00:00
parent c4daf616f0
commit 27dbedbc50
11 changed files with 255 additions and 286 deletions

View File

@ -312,8 +312,10 @@ extend Error
^false
}
method(#primitive) asInteger.
method(#primitive) asCharacter.
method asError { ^self }
method(#primitive) asInteger.
method(#primitive) asString.
method signal

View File

@ -1,5 +1,24 @@
class Magnitude(Object)
{
method < aMagnitude { self subclassResponsibility: #< }
method > aMagnitude { ^aMagnitude < self }
method <= aMagnitude { ^(aMagnitude < self) not }
method >= aMagnitude { ^(self < aMagnitude) not }
method between: min and: max
{
^self >= min and: [self <= max]
}
method min: aMagnitude
{
^self < aMagnitude ifTrue: [self] ifFalse: [aMagnitude]
}
method max: aMagnitude
{
^self > aMagnitude ifTrue: [self] ifFalse: [aMagnitude]
}
}
class Association(Magnitude)
@ -45,59 +64,17 @@ class Association(Magnitude)
class(#limited) Character(Magnitude)
{
## method(#primitive,#class) fromCode: code.
## method(#primitive) toCode.
## method(#primitive,#class) codePoint: code.
## method(#primitive) codePoint.
method asCharacter { ^self }
method(#primitive) asError.
method(#primitive) asInteger.
method = aCharacter
{
<primitive: #Character_eq>
self primitiveFailed.
}
method ~= char
{
<primitive: #Character_ne>
self primitiveFailed.
}
method < char
{
<primitive: #Character_lt>
self primitiveFailed.
}
method > char
{
<primitive: #Character_gt>
self primitiveFailed.
}
method <= char
{
<primitive: #Character_le>
self primitiveFailed.
}
method >= char
{
<primitive: #Character_ge>
self primitiveFailed.
}
method - char
{
<primitive: #Character_sub>
^(self asInteger - char asInteger) asCharacter
}
method + char
{
<primitive: #Character_add>
^(self asInteger + char asInteger) asCharacter
}
method(#primitive) < char.
method(#primitive) > char.
method(#primitive) <= char.
method(#primitive) >= char.
}
class(#limited) Number(Magnitude)
@ -345,15 +322,12 @@ class(#limited) Integer(Number)
count := 0.
while (count < self) { aBlock value. count := count + 1 }
}
method asInteger { ^self }
}
class(#limited) SmallInteger(Integer)
{
## method basicSize
## {
## ^0
## }
method(#primitive) asCharacter.
method(#primitive) asError.
}

View File

@ -371,29 +371,6 @@ class(#final,#limited) ProcessScheduler(Object)
var(#get) suspended_count := 0.
var suspended_head, suspended_tail.
method activeProcess
{
^self.active.
}
method resume: process
{
<primitive: #_processor_schedule>
self primitiveFailed.
(* The primitive does something like the following in principle:
(self.tally == 0)
ifTrue: [
self.head := process.
self.tail := process.
self.tally := 1.
]
ifFalse: [
process ps_next: self.head.
self.head ps_prev: process.
self.head := process.
self.tally := self.tally + 1.
].
*)
}
method activeProcess { ^self.active }
method resume: aProcess { ^aProcess resume }
}

View File

@ -57,7 +57,7 @@ class(#byte) IP4Address(IPAddress)
if (acc > 255) { Exception signal: ('invalid IPv4 address B ' & str). }.
digits := digits + 1.
}
elsif (c == $.)
elsif (c = $.)
{
if (dots >= 3 or: [digits == 0]) { Exception signal: ('invalid IPv4 address C ' & str). }.
self basicAt: dots put: acc.