help-smalltalk
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Help-smalltalk] [PATCH] Move most primitives to files other than Builti


From: Paolo Bonzini
Subject: [Help-smalltalk] [PATCH] Move most primitives to files other than Builtins.st
Date: Tue, 17 Apr 2007 15:25:25 +0200
User-agent: Thunderbird 1.5.0.10 (Macintosh/20070221)

We actually need only a handful of primitives to be in Builtins.st; all of them can reside in their own class files. One of them also was unused.

Just to improve a little the usability, I've pushed SysDict.st to be loaded near the beginning because it does include a few primitives that are useful to debug the VM.

The patch I attach only includes the lib.c patch and the new Builtins.st file; I'll push the full patch to the arch repository in a few hours (it is several tenths kb long but it's just shuffling code around).

This will ease conversion of Builtins.st to the new syntax, since it is the only manual conversion to be done (most others will be done automatically).

Paolo
2007-04-17  Paolo Bonzini  <address@hidden>

        * libgst/lex.c: Load SysDict.st early in the bootstrap process.
        * libgst/prims.def: Remove VMpr_Dictionary_atPut.


--- orig/libgst/prims.def
+++ mod/libgst/prims.def
@@ -3162,22 +3162,6 @@ primitive VMpr_Dictionary_at [succeed]
   PRIM_SUCCEEDED;
 }
 
-/* Dictionary at: put: */
-primitive VMpr_Dictionary_atPut [succeed]
-{
-  OOP oop1;
-  OOP oop2;
-  OOP oop3;
-  _gst_primitives_executed++;
-
-  oop3 = POP_OOP ();
-  oop2 = POP_OOP ();
-  oop1 = STACKTOP ();
-  DICTIONARY_AT_PUT (oop1, oop2, oop3);
-  SET_STACKTOP (oop3);
-  PRIM_SUCCEEDED;
-}
-
 /* This is not defined in terms of #error: in a .st file because some 
    of the required functionality may not be present when it gets
    first invoked, say during the loading of the first kernel files.
--- orig/libgst/lib.c
+++ mod/libgst/lib.c
@@ -296,6 +296,7 @@ static mst_Boolean ignore_image = false;
    is not an array but a list of consecutive file names.  */
 static const char standard_files[] = {
   "Builtins.st\0"
+  "SysDict.st\0"
   "Object.st\0"
   "Message.st\0"
   "DirMessage.st\0"
@@ -353,7 +354,6 @@ static const char standard_files[] = {
   "AbstNamespc.st\0"
   "RootNamespc.st\0"
   "Namespace.st\0"
-  "SysDict.st\0"
   "Stream.st\0"
   "PosStream.st\0"
   "ReadStream.st\0"




"=====================================================================
|
|   Smalltalk built in methods.  These are read in by the system 
|   initially, to prepare the execution environment.
|
|
 ======================================================================"

"======================================================================
|
| Copyright 1988,89,90,91,92,94,95,99,2000,2001,2002,2006,2007
| Free Software Foundation, Inc.
| Written by Steve Byrne.
|
| This file is part of the GNU Smalltalk class library.
|
| The GNU Smalltalk class library is free software; you can redistribute it
| and/or modify it under the terms of the GNU Lesser General Public License
| as published by the Free Software Foundation; either version 2.1, or (at
| your option) any later version.
| 
| The GNU Smalltalk class library is distributed in the hope that it will be
| useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser
| General Public License for more details.
| 
| You should have received a copy of the GNU Lesser General Public License
| along with the GNU Smalltalk class library; see the file COPYING.LIB.
| If not, write to the Free Software Foundation, 59 Temple Place - Suite
| 330, Boston, MA 02110-1301, USA.  
|
 ======================================================================"

!Object methodsFor: 'builtin'!

class
    "Answer the class to which the receiver belongs"
    <primitive: VMpr_Object_class>
    self primitiveFailed 
! !
    

!Behavior methodsFor: 'built ins'!

new
    "Create a new instance of a class with no indexed instance variables"
    <primitive: VMpr_Behavior_basicNew>
    self isFixed ifFalse: [ ^self new: 0 ].
    ^self primitiveFailed
!

basicNew
    "Create a new instance of a class with no indexed instance variables;
     this method must not be overridden."
    <primitive: VMpr_Behavior_basicNew>
    self isFixed ifFalse: [ ^self basicNew: 0 ].
    ^self primitiveFailed
!

new: numInstanceVariables
    "Create a new instance of a class with indexed instance variables. The
     instance has numInstanceVariables indexed instance variables."
    <primitive: VMpr_Behavior_basicNewColon>
    self isFixed ifTrue: [
        SystemExceptions.WrongMessageSent signalOn: #new: useInstead: #new
    ].
    numInstanceVariables isSmallInteger ifTrue: [ ^self primitiveFailed ].

    ^SystemExceptions.WrongClass signalOn: numInstanceVariables mustBe: 
SmallInteger
!

basicNew: numInstanceVariables
    "Create a new instance of a class with indexed instance variables. The
     instance has numInstanceVariables indexed instance variables;
     this method must not be overridden."
    <primitive: VMpr_Behavior_basicNewColon>
    self isFixed ifTrue: [
        SystemExceptions.WrongMessageSent signalOn: #basicNew: useInstead: 
#basicNew
    ].
    numInstanceVariables isSmallInteger ifTrue: [ ^self primitiveFailed ].

    ^SystemExceptions.WrongClass signalOn: numInstanceVariables mustBe: 
SmallInteger
! !


!Dictionary class methodsFor: 'built ins'!

new
    "Answer a new Dictionary. This method, actually, won't last long -
     until LookupTbl.st is loaded"
    <primitive: VMpr_Dictionary_new>
    ^self primitiveFailed
! !



!Dictionary methodsFor: 'built ins'!

at: key
    "Answer the value associated with the given key in the receiver.
     This method, actually, won't last long - until LookupTbl.st is loaded"
    <primitive: VMpr_Dictionary_at>
    ^self primitiveFailed
! !



!Class methodsFor: 'builtins'!

subclass: classNameString
    ^(Smalltalk at: classNameString)
!

subclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variable: shape subclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variableSubclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variableWordSubclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variableByteSubclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
! !



!UndefinedObject methodsFor: 'builtins'!

subclass: classNameString
    ^(Smalltalk at: classNameString)
!

subclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variable: shape subclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variableSubclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variableWordSubclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
!

variableByteSubclass: classNameString
  instanceVariableNames: stringInstVarNames
  classVariableNames: stringOfClassVarNames
  poolDictionaries: stringOfPoolNames
  category: categoryNameString
    ^(Smalltalk at: classNameString) category: categoryNameString
! !


!Class methodsFor: 'builtins'!

category: aString
    "Define a category for the receiver"

    category := aString
!

comment: aString
    "Define a comment for the receiver"

    comment := aString
!

shape: aSymbol
!

import: aString
! !

reply via email to

[Prev in Thread] Current Thread [Next in Thread]