Changes between Version 1 and Version 2 of OmnibusChanges


Ignore:
Timestamp:
07/15/13 14:18:54 (13 years ago)
Author:
siegel
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • OmnibusChanges

    v1 v2  
    88* modify !ModelBuilder to get rid of arrow expressions, replacing them with dot of star
    99* modify !ModelBuilder to get rid of C's pointer-array pun:
    10 ** in any subscript expression `a[i]`, make sure `a` has array type.  If it doesn't, translate to `*(a+i)`
    11 ** in any place where a pointer is called for, but instead an array `a` is used, replace `a` with `&a[0]`.  Examples include pointer arithmetic (`a+i`, `a-b`), argument to dereference operator `*`, actual arguments in function calls where the corresponding parameter has pointer type.
    12 ** make sure the parameter type of a function call is never an array type.   ABC should already be doing this.
     10 * in any subscript expression `a[i]`, make sure `a` has array type.  If it doesn't, translate to `*(a+i)`
     11 * in any place where a pointer is called for, but instead an array `a` is used, replace `a` with `&a[0]`.  Examples include pointer arithmetic (`a+i`, `a-b`), argument to dereference operator `*`, actual arguments in function calls where the corresponding parameter has pointer type.
     12 * make sure the parameter type of a function call is never an array type.   ABC should already be doing this.
    1313* use an enumerated type like ExpressionKind for the different kinds of expressions, so `switch` statements can be used
    1414* add a method to expressions like `SymbolicExpression getConstantValue()` and a corresponding setter, to cache the value of any expression that has a constant value, such as a literal expression
     
    1616
    1717== Semantics Changes ==
     18
     19* use interfaces for !Executor, !Evaluator, etc.
     20* finish javadocs for all methods
     21* don't use !Vector.  Use !LinkedList if you only need to iterate; use !ArrayList if you need constant time access
     22* !processType, etc: for these and other fields, make them canonic using !universe.canonic(…)!.  This can improve efficiency.
     23* never return !null if a case is not handled.  Instead throw an appropriate exception
     24* use !switch instead of big if...else if… sequence
     25* evaluation of dot expression should be simply `return universe.tupleRead(evaluate(expr.struct()…), expr.index())` or something like that
     26* evaluation of !SubscriptExpression should be simply `return universe.arrayRead(evaluate(expr.array()…), evaluate(expr.index()…))` or something like that
     27* evaluate of `NOT_EQUAL`: use `universe.neq()`
     28* implement pointer addition and subtraction.
     29* implement string literals using `universe.stringExpression()` (it returns an array of char).
     30* references: re-do to use new (upcoming) methods in symbolic universe to create a reference to a point within a symbolic expression.  this will eliminate the need to deal with navigation sequences.  You still need to figure out the variable, scope and model IDs.
     31* use a tuple with one integer field for scope IDs instead of symbolic constants.
     32* don't do any string manipulation or parsing dynamically, if possible
     33* `evaluate(…VariableExpression)`: the error reporting code for incorporating the state into the log entry seems general enough that you could factor it out into a separate method somewhere to re-use every time there is an error to report (maybe in Log?)
     34* construct and set the heap type in the constructor for !Evaluator, just like the other special types
     35