added a new class variable declarator 'var' or 'variable'
supported | .. | style declartion at the class level. added the RDONLY flag to the object header wrote some code to support default values for class-level variables such as instance variables
This commit is contained in:
@ -133,6 +133,15 @@ class Apex(nil)
|
||||
method basicAt: index put: anObject
|
||||
{
|
||||
<primitive: #_basic_at_put>
|
||||
## TODO: proper error handling
|
||||
(*
|
||||
if (primitiveError == error(generic))
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
self index: index outOfRange: (self basicSize).
|
||||
}*)
|
||||
self index: index outOfRange: (self basicSize).
|
||||
}
|
||||
|
||||
@ -429,6 +438,11 @@ class Apex(nil)
|
||||
{
|
||||
^self class notImplemented: method_name
|
||||
}
|
||||
|
||||
method messageProhibited: method_name
|
||||
{
|
||||
^self class messageProhibited: method_name
|
||||
}
|
||||
|
||||
method cannotExceptionizeError
|
||||
{
|
||||
|
@ -4,7 +4,8 @@
|
||||
##
|
||||
class(#pointer) Class(Apex)
|
||||
{
|
||||
dcl spec selfspec superclass subclasses name modname instvars classvars classinstvars pooldics instmthdic classmthdic nsdic trsize.
|
||||
var spec, selfspec, superclass, subclasses, name, modname, instvars.
|
||||
var classvars, classinstvars, pooldics, instmthdic, classmthdic, nsdic, cdic, trsize, initv.
|
||||
|
||||
method(#class) basicNew
|
||||
{
|
||||
|
@ -164,7 +164,7 @@ class(#byte) ByteArray(Collection)
|
||||
|
||||
class Set(Collection)
|
||||
{
|
||||
dcl tally bucket.
|
||||
var tally, bucket.
|
||||
|
||||
method(#class) new: size
|
||||
{
|
||||
@ -550,7 +550,7 @@ extend Apex
|
||||
|
||||
class Link(Object)
|
||||
{
|
||||
dcl prev next value.
|
||||
var prev, next, value.
|
||||
|
||||
method(#class) new: value
|
||||
{
|
||||
@ -570,7 +570,7 @@ class Link(Object)
|
||||
|
||||
class LinkedList(Collection)
|
||||
{
|
||||
dcl first last tally.
|
||||
var first, last, tally.
|
||||
|
||||
method initialize
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
## TODO: move Pointe to a separate file
|
||||
class Point(Object)
|
||||
{
|
||||
dcl x y.
|
||||
var x, y.
|
||||
|
||||
method(#class) new
|
||||
{
|
||||
|
@ -1,6 +1,6 @@
|
||||
class(#pointer) Context(Apex)
|
||||
{
|
||||
dcl sender ip sp ntmprs.
|
||||
var sender, ip, sp, ntmprs.
|
||||
|
||||
method sender
|
||||
{
|
||||
@ -44,7 +44,7 @@ block context...
|
||||
|
||||
class(#pointer) MethodContext(Context)
|
||||
{
|
||||
dcl method receiver home origin.
|
||||
var method, receiver, home, origin.
|
||||
|
||||
method pc
|
||||
{
|
||||
@ -101,7 +101,7 @@ class(#pointer) MethodContext(Context)
|
||||
|
||||
class(#pointer) BlockContext(Context)
|
||||
{
|
||||
dcl nargs source home origin.
|
||||
var nargs, source, home, origin.
|
||||
|
||||
method vargCount
|
||||
{
|
||||
@ -328,8 +328,8 @@ class(#pointer) BlockContext(Context)
|
||||
|
||||
class(#pointer) CompiledMethod(Object)
|
||||
{
|
||||
## dcl owner name preamble preamble_data_1 preamble_data_2 ntmprs nargs code source.
|
||||
dcl owner name preamble preamble_data_1 preamble_data_2 ntmprs nargs source.
|
||||
## var owner, name, preamble, preamble_data_1, preamble_data_2, ntmprs, nargs, code, source.
|
||||
var owner, name, preamble, preamble_data_1, preamble_data_2, ntmprs, nargs, source.
|
||||
|
||||
method preamble
|
||||
{
|
||||
|
@ -6,7 +6,7 @@
|
||||
##
|
||||
class Exception(Apex)
|
||||
{
|
||||
dcl signalContext handlerContext messageText.
|
||||
var signalContext, handlerContext, messageText.
|
||||
|
||||
method(#class) signal
|
||||
{
|
||||
@ -383,6 +383,10 @@ class InvalidArgumentException(Exception)
|
||||
{
|
||||
}
|
||||
|
||||
class ProhibitedMessageException(Exception)
|
||||
{
|
||||
}
|
||||
|
||||
extend Apex
|
||||
{
|
||||
method(#class) primitiveFailed
|
||||
@ -428,6 +432,11 @@ ctx := thisContext.
|
||||
NotImplementedException signal: (method_name & ' not implemented by ' & (self name)).
|
||||
}
|
||||
|
||||
method(#class) messageProhibited: method_name
|
||||
{
|
||||
ProhibitedMessageException signal: (method_name & ' not allowed for ' & (self name)).
|
||||
}
|
||||
|
||||
method(#class) cannotExceptionizeError
|
||||
{
|
||||
## todo: accept the object
|
||||
|
@ -10,7 +10,7 @@ class _FFI(Object) from 'ffi'
|
||||
|
||||
class FFI(Object)
|
||||
{
|
||||
dcl name ffi funcs.
|
||||
var name, ffi, funcs.
|
||||
|
||||
method(#class) new: aString
|
||||
{
|
||||
|
@ -4,7 +4,7 @@ class Magnitude(Object)
|
||||
|
||||
class Association(Magnitude)
|
||||
{
|
||||
dcl key value.
|
||||
var key, value.
|
||||
|
||||
method(#class) key: key value: value
|
||||
{
|
||||
|
@ -2,8 +2,8 @@
|
||||
|
||||
class Mill(Object)
|
||||
{
|
||||
dcl registrar.
|
||||
dcl obj.
|
||||
var registrar.
|
||||
var obj.
|
||||
|
||||
method initialize
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
class(#pointer) Process(Object)
|
||||
{
|
||||
dcl initial_context current_context state sp prev next sem.
|
||||
var initial_context, current_context, state, sp, prev, next, sem.
|
||||
|
||||
method new
|
||||
{
|
||||
@ -99,7 +99,7 @@ class(#pointer) Process(Object)
|
||||
|
||||
class Semaphore(Object)
|
||||
{
|
||||
dcl count waiting_head waiting_tail heapIndex fireTimeSec fireTimeNsec ioIndex ioData ioMask.
|
||||
var count, waiting_head, waiting_tail, heapIndex, fireTimeSec, fireTimeNsec, ioIndex, ioData, ioMask.
|
||||
|
||||
method(#class) forMutualExclusion
|
||||
{
|
||||
@ -176,7 +176,7 @@ class Semaphore(Object)
|
||||
|
||||
class SemaphoreHeap(Object)
|
||||
{
|
||||
dcl arr size.
|
||||
var arr, size.
|
||||
|
||||
method initialize
|
||||
{
|
||||
@ -358,7 +358,7 @@ class SemaphoreHeap(Object)
|
||||
|
||||
class ProcessScheduler(Object)
|
||||
{
|
||||
dcl tally active runnable_head runnable_tail sem_heap.
|
||||
var tally, active, runnable_head, runnable_tail, sem_heap.
|
||||
|
||||
method new
|
||||
{
|
||||
|
@ -1,7 +1,7 @@
|
||||
|
||||
class Stdio(Object) from 'stdio'
|
||||
{
|
||||
dcl(#class) in out err.
|
||||
var(#class) in, out, err.
|
||||
|
||||
method(#primitive) open(name, mode).
|
||||
method(#primitive) close.
|
||||
|
@ -6,18 +6,18 @@ class X11(Object) from 'x11'
|
||||
{
|
||||
(* The X11 class represents a X11 display *)
|
||||
|
||||
dcl(#class) default_display.
|
||||
var(#class) default_display.
|
||||
|
||||
dcl cid.
|
||||
dcl windows. ## all windows registered
|
||||
var cid.
|
||||
var windows. ## all windows registered
|
||||
|
||||
dcl event_loop_sem event_loop_proc.
|
||||
dcl ll_event_blocks.
|
||||
var event_loop_sem, event_loop_proc.
|
||||
var ll_event_blocks.
|
||||
|
||||
dcl expose_event.
|
||||
dcl key_event.
|
||||
dcl mouse_event.
|
||||
dcl mouse_wheel_event.
|
||||
var expose_event.
|
||||
var key_event.
|
||||
var mouse_event.
|
||||
var mouse_wheel_event.
|
||||
|
||||
method(#primitive) _connect.
|
||||
method(#primitive) _disconnect.
|
||||
@ -35,7 +35,7 @@ class X11.Exception(System.Exception)
|
||||
|
||||
class X11.Rectangle(Object)
|
||||
{
|
||||
dcl x y width height.
|
||||
var x, y, width, height.
|
||||
|
||||
method initialize
|
||||
{
|
||||
@ -79,6 +79,7 @@ pooldic X11.LLEvent
|
||||
LEAVE_NOTIFY := 8.
|
||||
EXPOSE := 12.
|
||||
VISIBILITY_NOTIFY := 15.
|
||||
DESTROY_NOTIFY := 17.
|
||||
CONFIGURE_NOTIFY := 22.
|
||||
CLIENT_MESSAGE := 33.
|
||||
}
|
||||
@ -87,36 +88,56 @@ class X11.Event(Object)
|
||||
{
|
||||
}
|
||||
|
||||
class X11.InputEvent(X11.Event)
|
||||
|
||||
class X11.KeyEvent(X11.Event)
|
||||
{
|
||||
}
|
||||
|
||||
class X11.KeyEvent(X11.InputEvent)
|
||||
pooldic X11.MouseButton
|
||||
{
|
||||
LEFT := 1.
|
||||
MIDDLE := 2.
|
||||
RIGHT := 3.
|
||||
}
|
||||
|
||||
class X11.MouseEvent(X11.InputEvent)
|
||||
class X11.MouseEvent(X11.Event)
|
||||
{
|
||||
dcl x y.
|
||||
var x, y, button.
|
||||
|
||||
method x { ^self.x }
|
||||
method y { ^self.y }
|
||||
method x { ^self.x }
|
||||
method y { ^self.y }
|
||||
method button { ^self.button } ## X11.MouseButton
|
||||
|
||||
method x: x y: y
|
||||
method initialize
|
||||
{
|
||||
self.x := 0.
|
||||
self.y := 0.
|
||||
self.button := 0.
|
||||
}
|
||||
|
||||
method x: x y: y button: button
|
||||
{
|
||||
self.x := x.
|
||||
self.y := y.
|
||||
self.button := button.
|
||||
}
|
||||
}
|
||||
|
||||
class X11.MouseWheelEvent(X11.InputEvent)
|
||||
class X11.MouseWheelEvent(X11.Event)
|
||||
{
|
||||
dcl x y amount.
|
||||
var x, y, amount.
|
||||
|
||||
method x { ^self.x }
|
||||
method y { ^self.y }
|
||||
method amount { ^self.amount }
|
||||
|
||||
method initialize
|
||||
{
|
||||
self.x := 0.
|
||||
self.y := 0.
|
||||
self.amount := 0.
|
||||
}
|
||||
|
||||
method x: x y: y amount: amount
|
||||
{
|
||||
self.x := x.
|
||||
@ -127,13 +148,21 @@ class X11.MouseWheelEvent(X11.InputEvent)
|
||||
|
||||
class X11.ExposeEvent(X11.Event)
|
||||
{
|
||||
dcl x y width height.
|
||||
var x, y, width, height.
|
||||
|
||||
method x { ^self.x }
|
||||
method y { ^self.y }
|
||||
method width { ^self.width }
|
||||
method height { ^self.height }
|
||||
|
||||
|
||||
method initialize
|
||||
{
|
||||
self.x := 0.
|
||||
self.y := 0.
|
||||
self.width := 0.
|
||||
self.height := 0.
|
||||
}
|
||||
|
||||
method x: x y: y width: width height: height
|
||||
{
|
||||
self.x := x.
|
||||
@ -143,11 +172,6 @@ class X11.ExposeEvent(X11.Event)
|
||||
}
|
||||
}
|
||||
|
||||
class X11.WindowEvent(X11.Event)
|
||||
{
|
||||
dcl width height.
|
||||
}
|
||||
|
||||
## ---------------------------------------------------------------------------
|
||||
## Graphics Context
|
||||
## ---------------------------------------------------------------------------
|
||||
@ -163,7 +187,7 @@ pooldic X11.GCAttr
|
||||
|
||||
class X11.GC(Object) from 'x11.gc'
|
||||
{
|
||||
dcl window id.
|
||||
var window, id.
|
||||
|
||||
method(#primitive) _make (display, window).
|
||||
method(#primitive) _kill.
|
||||
@ -215,7 +239,7 @@ class X11.GC(Object) from 'x11.gc'
|
||||
|
||||
class X11.Component(Object)
|
||||
{
|
||||
dcl parent.
|
||||
var parent.
|
||||
|
||||
method new
|
||||
{
|
||||
@ -268,8 +292,8 @@ class X11.Canvas(Component)
|
||||
|
||||
class X11.WindowedComponent(Component) from 'x11.win'
|
||||
{
|
||||
dcl(#class) geom.
|
||||
dcl wid bounds.
|
||||
var(#class) geom.
|
||||
var wid, bounds.
|
||||
|
||||
method(#primitive) _get_window_dwatom.
|
||||
method(#primitive) _get_window_id.
|
||||
@ -331,6 +355,11 @@ class X11.WindowedComponent(Component) from 'x11.win'
|
||||
}
|
||||
}
|
||||
|
||||
method cachedBounds
|
||||
{
|
||||
^self.bounds
|
||||
}
|
||||
|
||||
method bounds
|
||||
{
|
||||
self _get_window_geometry (self.bounds).
|
||||
@ -374,7 +403,7 @@ class X11.WindowedComponent(Component) from 'x11.win'
|
||||
}
|
||||
method mousePressed: event
|
||||
{
|
||||
('MOUSE PRESSED' & (self.wid asString) & ' ' & (event x asString) & ' ' & (event y asString)) dump.
|
||||
('MOUSE PRESSED' & (self.wid asString) & ' ' & (event x asString) & ' ' & (event y asString) & ' ' & (event button asString)) dump.
|
||||
}
|
||||
method mouseReleased: event
|
||||
{
|
||||
@ -388,7 +417,7 @@ class X11.WindowedComponent(Component) from 'x11.win'
|
||||
|
||||
class X11.Container(WindowedComponent)
|
||||
{
|
||||
dcl components.
|
||||
var components.
|
||||
|
||||
method initialize
|
||||
{
|
||||
@ -417,7 +446,7 @@ class X11.Container(WindowedComponent)
|
||||
|
||||
class X11.FrameWindow(Container)
|
||||
{
|
||||
dcl display.
|
||||
var display.
|
||||
|
||||
method display { ^self.display }
|
||||
method display: display { self.display := display }
|
||||
@ -528,6 +557,7 @@ extend X11
|
||||
at: X11.LLEvent.ENTER_NOTIFY put: #__handle_notify:;
|
||||
at: X11.LLEvent.LEAVE_NOTIFY put: #__handle_notify:;
|
||||
at: X11.LLEvent.EXPOSE put: #__handle_expose:;
|
||||
at: X11.LLEvent.DESTROY_NOTIFY put: #__handle_destroy_notify:;
|
||||
at: X11.LLEvent.CONFIGURE_NOTIFY put: #__handle_configure_notify:;
|
||||
at: X11.LLEvent.CLIENT_MESSAGE put: #__handle_client_message:.
|
||||
}
|
||||
@ -583,12 +613,9 @@ extend X11
|
||||
|
||||
while ((event := self _get_event) notNil)
|
||||
{
|
||||
## XCB_EXPOSE 12
|
||||
## XCB_DESTROY_WINDOW 4
|
||||
('EVENT================>' & event asString) dump.
|
||||
if (event isError)
|
||||
{
|
||||
'Error has occurred in ....' dump.
|
||||
System logNl: ('Error while getting a event from display ' & self.cid asString).
|
||||
ongoing := false.
|
||||
break.
|
||||
}
|
||||
@ -638,7 +665,6 @@ extend X11
|
||||
}
|
||||
else
|
||||
{
|
||||
('Performing ...' & mthname asString) dump.
|
||||
^self perform (mthname, event).
|
||||
##^self perform: mthname with: event.
|
||||
}
|
||||
@ -698,6 +724,7 @@ extend X11
|
||||
method __handle_button_event: event
|
||||
{
|
||||
(*
|
||||
typedef uint8_t xcb_button_t;
|
||||
typedef struct xcb_button_press_event_t {
|
||||
uint8_t response_type;
|
||||
xcb_button_t detail; // uint8_t
|
||||
@ -731,16 +758,10 @@ extend X11
|
||||
detail := event getUint8(1).
|
||||
if (detail >= 1 and: [detail <= 3])
|
||||
{
|
||||
(*
|
||||
self.mouse_event
|
||||
## TODO: encode detail also..
|
||||
x: System _getUint16(event, 24) ## event_x
|
||||
y: System _getUint16(event, 26). ## event_y
|
||||
*)
|
||||
self.mouse_event
|
||||
## TODO: encode detail also..
|
||||
x: event getUint16(24) ## event_x
|
||||
y: event getUint16(26). ## event_y
|
||||
x: event getUint16(24) ## event_x
|
||||
y: event getUint16(26) ## event_y
|
||||
button: detail.
|
||||
|
||||
if (type == X11.LLEvent.BUTTON_PRESS)
|
||||
{
|
||||
@ -755,12 +776,6 @@ extend X11
|
||||
{
|
||||
if (type == X11.LLEvent.BUTTON_RELEASE)
|
||||
{
|
||||
(*
|
||||
self.mouse_wheel_event
|
||||
x: System _getUint16(event, 24) ## event_x
|
||||
y: System _getUint16(event, 26) ## event_y
|
||||
amount: (if (detail == 4) { -1 } else { 1 }).
|
||||
*)
|
||||
self.mouse_wheel_event
|
||||
x: event getUint16(24) ## event_x
|
||||
y: event getUint16(26) ## event_y
|
||||
@ -775,6 +790,33 @@ extend X11
|
||||
}
|
||||
}
|
||||
|
||||
method __handle_destroy_notify: event
|
||||
{
|
||||
(*
|
||||
typedef struct xcb_destroy_notify_event_t {
|
||||
uint8_t response_type;
|
||||
uint8_t pad0;
|
||||
uint16_t sequence;
|
||||
xcb_window_t event;
|
||||
xcb_window_t window;
|
||||
} xcb_destroy_notify_event_t;
|
||||
*)
|
||||
|
||||
| wid window |
|
||||
|
||||
wid := System _getUint32(event, 4). ## event
|
||||
window := self.windows at: wid.
|
||||
|
||||
if (window notError)
|
||||
{
|
||||
'WINDOW DESTROYED....................' dump.
|
||||
}
|
||||
else
|
||||
{
|
||||
System logNl: ('Destroy notify event on unknown window - ' & wid asString).
|
||||
}
|
||||
}
|
||||
|
||||
method __handle_configure_notify: event
|
||||
{
|
||||
(*
|
||||
@ -805,7 +847,7 @@ extend X11
|
||||
{
|
||||
width := System _getUint16(event, 20).
|
||||
height := System _getUint16(event, 22).
|
||||
bounds := window bounds.
|
||||
bounds := window cachedBounds. ## old bounds before resizing.
|
||||
if (bounds width ~= width or: [bounds height ~= height]) { window windowResized }.
|
||||
}
|
||||
else
|
||||
@ -844,7 +886,6 @@ extend X11
|
||||
dw := event getUint32(12). ## data.data32[0]
|
||||
if (dw == window _get_window_dwatom)
|
||||
{
|
||||
## TODO: call close query callback???
|
||||
window close.
|
||||
}
|
||||
|
||||
@ -914,9 +955,9 @@ class MyButton(X11.Button)
|
||||
|
||||
class MyFrame(X11.FrameWindow)
|
||||
{
|
||||
dcl gc.
|
||||
dcl b1.
|
||||
dcl b2.
|
||||
var gc.
|
||||
var b1.
|
||||
var b2.
|
||||
|
||||
method windowOpened
|
||||
{
|
||||
|
@ -62,7 +62,7 @@ class MyObject(Object)
|
||||
') expected'
|
||||
'] expected'
|
||||
'. expected'
|
||||
' expected'
|
||||
', expected'
|
||||
'| expected'
|
||||
'> expected'
|
||||
':= expected'
|
||||
@ -75,14 +75,15 @@ class MyObject(Object)
|
||||
'contradictory class definition'
|
||||
'wrong class name'
|
||||
'non-pointer class inheriting superclass with trailer size set'
|
||||
'dcl not allowed'
|
||||
'variable declaration not allowed'
|
||||
'modifier expected'
|
||||
'wrong modifier'
|
||||
'disallowed modifier'
|
||||
'duplicate modifier'
|
||||
'wrong method name'
|
||||
'method name expected'
|
||||
'duplicate method name'
|
||||
'invalid variadic method definition'
|
||||
'variable name expected'
|
||||
'duplicate argument name'
|
||||
'duplicate temporary variable name'
|
||||
'duplicate variable name'
|
||||
|
Reference in New Issue
Block a user