Renamed sunWriter writing methods to match the command names in TSpcInterp.
This commit is contained in:
parent
2ce9882cad
commit
72ea2a031c
9 changed files with 171 additions and 181 deletions
|
@ -118,9 +118,9 @@ namespace arookas {
|
|||
|
||||
public override void Compile(sunContext context) {
|
||||
Condition.Compile(context);
|
||||
var falsePrologue = context.Text.GotoIfZero();
|
||||
var falsePrologue = context.Text.WriteJNE();
|
||||
TrueBody.Compile(context);
|
||||
var trueEpilogue = context.Text.Goto();
|
||||
var trueEpilogue = context.Text.WriteJMP();
|
||||
context.Text.ClosePoint(falsePrologue);
|
||||
FalseBody.Compile(context);
|
||||
context.Text.ClosePoint(trueEpilogue);
|
||||
|
|
|
@ -12,11 +12,11 @@ namespace arookas {
|
|||
|
||||
public override void Compile(sunContext context) {
|
||||
Condition.Compile(context);
|
||||
var trueBodyEpilogue = context.Text.GotoIfZero();
|
||||
var trueBodyEpilogue = context.Text.WriteJNE();
|
||||
TrueBody.Compile(context);
|
||||
var falseBody = FalseBody;
|
||||
if (falseBody != null) {
|
||||
var falseBodyEpilogue = context.Text.Goto();
|
||||
var falseBodyEpilogue = context.Text.WriteJMP();
|
||||
context.Text.ClosePoint(trueBodyEpilogue);
|
||||
falseBody.Compile(context);
|
||||
context.Text.ClosePoint(falseBodyEpilogue);
|
||||
|
@ -54,9 +54,9 @@ namespace arookas {
|
|||
var bodyPrologue = context.Text.OpenPoint();
|
||||
var continuePoint = context.Text.OpenPoint();
|
||||
Condition.Compile(context);
|
||||
var bodyEpilogue = context.Text.GotoIfZero();
|
||||
var bodyEpilogue = context.Text.WriteJNE();
|
||||
Body.Compile(context);
|
||||
context.Text.Goto(bodyPrologue);
|
||||
context.Text.WriteJMP(bodyPrologue);
|
||||
context.Text.ClosePoint(bodyEpilogue);
|
||||
var breakPoint = context.Text.OpenPoint();
|
||||
context.Loops.Pop(context, breakPoint, continuePoint);
|
||||
|
@ -76,8 +76,8 @@ namespace arookas {
|
|||
Body.Compile(context);
|
||||
var continuePoint = context.Text.OpenPoint();
|
||||
Condition.Compile(context);
|
||||
var bodyEpilogue = context.Text.GotoIfZero();
|
||||
context.Text.Goto(bodyPrologue);
|
||||
var bodyEpilogue = context.Text.WriteJNE();
|
||||
context.Text.WriteJMP(bodyPrologue);
|
||||
context.Text.ClosePoint(bodyEpilogue);
|
||||
var breakPoint = context.Text.OpenPoint();
|
||||
context.Loops.Pop(context, breakPoint, continuePoint);
|
||||
|
@ -99,11 +99,11 @@ namespace arookas {
|
|||
TryCompile(Declaration, context);
|
||||
var bodyPrologue = context.Text.OpenPoint();
|
||||
TryCompile(Condition, context);
|
||||
var bodyEpilogue = context.Text.GotoIfZero();
|
||||
var bodyEpilogue = context.Text.WriteJNE();
|
||||
Body.Compile(context);
|
||||
var continuePoint = context.Text.OpenPoint();
|
||||
TryCompile(Iteration, context);
|
||||
context.Text.Goto(bodyPrologue);
|
||||
context.Text.WriteJMP(bodyPrologue);
|
||||
context.Text.ClosePoint(bodyEpilogue);
|
||||
var breakPoint = context.Text.OpenPoint();
|
||||
context.Loops.Pop(context, breakPoint, continuePoint);
|
||||
|
@ -133,10 +133,10 @@ namespace arookas {
|
|||
var expression = Expression;
|
||||
if (expression != null) {
|
||||
expression.Compile(context);
|
||||
context.Text.ReturnValue();
|
||||
context.Text.WriteRET();
|
||||
}
|
||||
else {
|
||||
context.Text.ReturnVoid();
|
||||
context.Text.WriteRET0();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -149,7 +149,7 @@ namespace arookas {
|
|||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) {
|
||||
var point = context.Text.Goto();
|
||||
var point = context.Text.WriteJMP();
|
||||
if (!context.Loops.AddBreak(point, IsNamed ? NameLabel.Value : null)) {
|
||||
throw new sunBreakException(this);
|
||||
}
|
||||
|
@ -164,7 +164,7 @@ namespace arookas {
|
|||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) {
|
||||
var point = context.Text.Goto();
|
||||
var point = context.Text.WriteJMP();
|
||||
if (!context.Loops.AddContinue(point, IsNamed ? NameLabel.Value : null)) {
|
||||
throw new sunContinueException(this);
|
||||
}
|
||||
|
|
|
@ -44,7 +44,7 @@ namespace arookas {
|
|||
Arguments.Compile(context);
|
||||
callableInfo.OpenCallSite(context, Arguments.Count);
|
||||
if (IsStatement) {
|
||||
context.Text.Pop();
|
||||
context.Text.WritePOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -13,7 +13,7 @@ namespace arookas {
|
|||
protected sunIntLiteral(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.PushInt(Value); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteINT(Value); }
|
||||
|
||||
sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) {
|
||||
return sunExpressionFlags.Literals;
|
||||
|
@ -42,7 +42,7 @@ namespace arookas {
|
|||
}
|
||||
|
||||
public override void Compile(sunContext context) {
|
||||
context.Text.PushFloat(Value);
|
||||
context.Text.WriteFLT(Value);
|
||||
}
|
||||
|
||||
sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) {
|
||||
|
@ -57,7 +57,7 @@ namespace arookas {
|
|||
}
|
||||
|
||||
public override void Compile(sunContext context) {
|
||||
context.Text.PushData(context.DataTable.Add(Value));
|
||||
context.Text.WriteSTR(context.DataTable.Add(Value));
|
||||
}
|
||||
|
||||
// string unescaping utility
|
||||
|
|
|
@ -24,7 +24,7 @@ namespace arookas {
|
|||
public sunLogOR(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.LogOR(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteOR(); }
|
||||
}
|
||||
|
||||
// precedence 1
|
||||
|
@ -34,7 +34,7 @@ namespace arookas {
|
|||
public sunLogAND(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.LogAND(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteAND(); }
|
||||
}
|
||||
|
||||
// precedence 2
|
||||
|
@ -44,7 +44,7 @@ namespace arookas {
|
|||
public sunBitOR(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.BitOR(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteBOR(); }
|
||||
}
|
||||
|
||||
// precedence 3
|
||||
|
@ -54,7 +54,7 @@ namespace arookas {
|
|||
public sunBitAND(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.BitAND(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteBAND(); }
|
||||
}
|
||||
|
||||
// precedence 4
|
||||
|
@ -64,7 +64,7 @@ namespace arookas {
|
|||
public sunEq(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Eq(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteEQ(); }
|
||||
}
|
||||
|
||||
class sunNtEq : sunOperator {
|
||||
|
@ -73,7 +73,7 @@ namespace arookas {
|
|||
public sunNtEq(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.NtEq(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteNE(); }
|
||||
}
|
||||
|
||||
// precedence 5
|
||||
|
@ -83,7 +83,7 @@ namespace arookas {
|
|||
public sunLt(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Lt(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteLT(); }
|
||||
}
|
||||
|
||||
class sunLtEq : sunOperator {
|
||||
|
@ -92,7 +92,7 @@ namespace arookas {
|
|||
public sunLtEq(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.LtEq(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteLE(); }
|
||||
}
|
||||
|
||||
class sunGt : sunOperator {
|
||||
|
@ -101,7 +101,7 @@ namespace arookas {
|
|||
public sunGt(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Gt(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteGT(); }
|
||||
}
|
||||
|
||||
class sunGtEq : sunOperator {
|
||||
|
@ -110,7 +110,7 @@ namespace arookas {
|
|||
public sunGtEq(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.GtEq(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteGE(); }
|
||||
}
|
||||
|
||||
// precedence 6
|
||||
|
@ -120,7 +120,7 @@ namespace arookas {
|
|||
public sunBitLsh(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.ShL(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteSHL(); }
|
||||
}
|
||||
|
||||
class sunBitRsh : sunOperator {
|
||||
|
@ -129,7 +129,7 @@ namespace arookas {
|
|||
public sunBitRsh(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.ShR(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteSHR(); }
|
||||
}
|
||||
|
||||
// precedence 7
|
||||
|
@ -139,7 +139,7 @@ namespace arookas {
|
|||
public sunAdd(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Add(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteADD(); }
|
||||
}
|
||||
|
||||
class sunSub : sunOperator {
|
||||
|
@ -148,7 +148,7 @@ namespace arookas {
|
|||
public sunSub(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Sub(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteSUB(); }
|
||||
}
|
||||
|
||||
// precedence 8
|
||||
|
@ -158,7 +158,7 @@ namespace arookas {
|
|||
public sunMul(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Mul(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteMUL(); }
|
||||
}
|
||||
|
||||
class sunDiv : sunOperator {
|
||||
|
@ -167,7 +167,7 @@ namespace arookas {
|
|||
public sunDiv(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Div(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteDIV(); }
|
||||
}
|
||||
|
||||
class sunMod : sunOperator {
|
||||
|
@ -176,7 +176,7 @@ namespace arookas {
|
|||
public sunMod(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Mod(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteMOD(); }
|
||||
}
|
||||
|
||||
// precedence 9
|
||||
|
@ -186,7 +186,7 @@ namespace arookas {
|
|||
public sunLogNOT(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.LogNOT(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteNOT(); }
|
||||
}
|
||||
class sunNeg : sunOperator {
|
||||
public override int Precedence { get { return 9; } }
|
||||
|
@ -194,7 +194,7 @@ namespace arookas {
|
|||
public sunNeg(sunSourceLocation location)
|
||||
: base(location) { }
|
||||
|
||||
public override void Compile(sunContext context) { context.Text.Neg(); }
|
||||
public override void Compile(sunContext context) { context.Text.WriteNEG(); }
|
||||
}
|
||||
|
||||
// assignment operators
|
||||
|
@ -218,7 +218,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.Add();
|
||||
context.Text.WriteADD();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -230,7 +230,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.Sub();
|
||||
context.Text.WriteSUB();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -242,7 +242,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.Mul();
|
||||
context.Text.WriteMUL();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -254,7 +254,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.Div();
|
||||
context.Text.WriteDIV();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -266,7 +266,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.Mod();
|
||||
context.Text.WriteMOD();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -278,7 +278,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.BitAND();
|
||||
context.Text.WriteBAND();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -290,7 +290,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.BitOR();
|
||||
context.Text.WriteBOR();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -302,7 +302,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.ShL();
|
||||
context.Text.WriteSHL();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
@ -314,7 +314,7 @@ namespace arookas {
|
|||
public override void Compile(sunContext context, sunStorableSymbol symbol, sunExpression expression) {
|
||||
symbol.CompileGet(context);
|
||||
expression.Compile(context);
|
||||
context.Text.ShR();
|
||||
context.Text.WriteSHR();
|
||||
symbol.CompileSet(context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
|
||||
public override void Compile(sunContext context) {
|
||||
var builtinInfo = context.ResolveSystemBuiltin("yield");
|
||||
context.Text.CallBuiltin(builtinInfo.Index, 0);
|
||||
context.Text.Pop();
|
||||
context.Text.WriteFUNC(builtinInfo.Index, 0);
|
||||
context.Text.WritePOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -16,8 +16,8 @@
|
|||
|
||||
public override void Compile(sunContext context) {
|
||||
var builtinInfo = context.ResolveSystemBuiltin("exit");
|
||||
context.Text.CallBuiltin(builtinInfo.Index, 0);
|
||||
context.Text.Pop();
|
||||
context.Text.WriteFUNC(builtinInfo.Index, 0);
|
||||
context.Text.WritePOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -27,8 +27,8 @@
|
|||
|
||||
public override void Compile(sunContext context) {
|
||||
var builtinInfo = context.ResolveSystemBuiltin("dump");
|
||||
context.Text.CallBuiltin(builtinInfo.Index, 0);
|
||||
context.Text.Pop();
|
||||
context.Text.WriteFUNC(builtinInfo.Index, 0);
|
||||
context.Text.WritePOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,8 +38,8 @@
|
|||
|
||||
public override void Compile(sunContext context) {
|
||||
var builtinInfo = context.ResolveSystemBuiltin("lock");
|
||||
context.Text.CallBuiltin(builtinInfo.Index, 0);
|
||||
context.Text.Pop();
|
||||
context.Text.WriteFUNC(builtinInfo.Index, 0);
|
||||
context.Text.WritePOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -49,8 +49,8 @@
|
|||
|
||||
public override void Compile(sunContext context) {
|
||||
var builtinInfo = context.ResolveSystemBuiltin("unlock");
|
||||
context.Text.CallBuiltin(builtinInfo.Index, 0);
|
||||
context.Text.Pop();
|
||||
context.Text.WriteFUNC(builtinInfo.Index, 0);
|
||||
context.Text.WritePOP();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,7 @@
|
|||
|
||||
protected void Compile(sunContext context, sunBuiltinSymbol symbol) {
|
||||
Argument.Compile(context);
|
||||
context.Text.CallBuiltin(symbol.Index, 1);
|
||||
context.Text.WriteFUNC(symbol.Index, 1);
|
||||
}
|
||||
|
||||
sunExpressionFlags sunTerm.GetExpressionFlags(sunContext context) {
|
||||
|
@ -106,8 +106,8 @@
|
|||
public override void Compile(sunContext context) {
|
||||
var builtinInfo = context.ResolveSystemBuiltin("print");
|
||||
ArgumentList.Compile(context);
|
||||
context.Text.CallBuiltin(builtinInfo.Index, ArgumentList.Count);
|
||||
context.Text.Pop();
|
||||
context.Text.WriteFUNC(builtinInfo.Index, ArgumentList.Count);
|
||||
context.Text.WritePOP();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,7 +26,7 @@ namespace arookas {
|
|||
if (result != sunImportResult.Loaded) {
|
||||
throw new sunImportException(name, result);
|
||||
}
|
||||
context.Text.Terminate(); // NOTETOSELF: don't do this via sunNode.Compile because imported files will add this as well
|
||||
context.Text.WriteEND(); // NOTETOSELF: don't do this via sunNode.Compile because imported files will add this as well
|
||||
foreach (var function in context.SymbolTable.Functions) {
|
||||
function.Compile(context);
|
||||
}
|
||||
|
|
|
@ -99,7 +99,7 @@ namespace arookas {
|
|||
throw new InvalidOperationException("Cannot compile builtins.");
|
||||
}
|
||||
public override void OpenCallSite(sunContext context, int argumentCount) {
|
||||
context.Text.CallBuiltin(Index, argumentCount);
|
||||
context.Text.WriteFUNC(Index, argumentCount);
|
||||
}
|
||||
public override void CloseCallSites(sunContext context) { }
|
||||
}
|
||||
|
@ -124,14 +124,14 @@ namespace arookas {
|
|||
foreach (var parameter in Parameters) {
|
||||
context.Scopes.DeclareVariable(parameter); // since there is no AST node for these, they won't affect MaxLocalCount
|
||||
}
|
||||
context.Text.StoreDisplay(1);
|
||||
context.Text.DeclareLocal(Body.MaxLocalCount);
|
||||
context.Text.WriteMKDS(1);
|
||||
context.Text.WriteMKFR(Body.MaxLocalCount);
|
||||
Body.Compile(context);
|
||||
context.Text.ReturnVoid();
|
||||
context.Text.WriteRET0();
|
||||
context.Scopes.Pop();
|
||||
}
|
||||
public override void OpenCallSite(sunContext context, int argumentCount) {
|
||||
var point = context.Text.CallFunction(argumentCount);
|
||||
var point = context.Text.WriteCALL(argumentCount);
|
||||
CallSites.Add(point);
|
||||
}
|
||||
public override void CloseCallSites(sunContext context) {
|
||||
|
@ -178,13 +178,13 @@ namespace arookas {
|
|||
public abstract void CompileSet(sunContext context);
|
||||
public virtual void CompileInc(sunContext context) {
|
||||
CompileGet(context);
|
||||
context.Text.PushInt(1);
|
||||
context.Text.Add();
|
||||
context.Text.WriteINT(1);
|
||||
context.Text.WriteADD();
|
||||
}
|
||||
public virtual void CompileDec(sunContext context) {
|
||||
CompileGet(context);
|
||||
context.Text.PushInt(1);
|
||||
context.Text.Sub();
|
||||
context.Text.WriteINT(1);
|
||||
context.Text.WriteSUB();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -202,10 +202,10 @@ namespace arookas {
|
|||
Index = index;
|
||||
}
|
||||
|
||||
public override void CompileGet(sunContext context) { context.Text.PushVariable(Display, Index); }
|
||||
public override void CompileSet(sunContext context) { context.Text.StoreVariable(Display, Index); }
|
||||
public override void CompileInc(sunContext context) { context.Text.IncVariable(Display, Index); }
|
||||
public override void CompileDec(sunContext context) { context.Text.DecVariable(Display, Index); }
|
||||
public override void CompileGet(sunContext context) { context.Text.WriteVAR(Display, Index); }
|
||||
public override void CompileSet(sunContext context) { context.Text.WriteASS(Display, Index); }
|
||||
public override void CompileInc(sunContext context) { context.Text.WriteINC(Display, Index); }
|
||||
public override void CompileDec(sunContext context) { context.Text.WriteDEC(Display, Index); }
|
||||
}
|
||||
|
||||
class sunConstantSymbol : sunStorableSymbol {
|
||||
|
|
206
ssc/writer.cs
206
ssc/writer.cs
|
@ -2,153 +2,143 @@
|
|||
|
||||
namespace arookas {
|
||||
class sunWriter {
|
||||
aBinaryWriter writer;
|
||||
aBinaryWriter mWriter;
|
||||
|
||||
public uint Offset { get { return (uint)writer.Position; } }
|
||||
public uint Offset { get { return (uint)mWriter.Position; } }
|
||||
|
||||
public sunWriter(aBinaryWriter writer) {
|
||||
this.writer = writer;
|
||||
this.mWriter = writer;
|
||||
}
|
||||
|
||||
public sunPoint OpenPoint() { return new sunPoint(Offset); }
|
||||
public void ClosePoint(sunPoint point) { ClosePoint(point, (uint)writer.Position); }
|
||||
public void ClosePoint(sunPoint point) { ClosePoint(point, (uint)mWriter.Position); }
|
||||
public void ClosePoint(sunPoint point, uint offset) {
|
||||
writer.Keep();
|
||||
writer.Goto(point.Offset);
|
||||
writer.Write32(offset);
|
||||
writer.Back();
|
||||
mWriter.Keep();
|
||||
mWriter.Goto(point.Offset);
|
||||
mWriter.Write32(offset);
|
||||
mWriter.Back();
|
||||
}
|
||||
|
||||
public void PushInt(int value) {
|
||||
public void WriteINT(int value) {
|
||||
switch (value) { // shortcut commands
|
||||
case 0: writer.Write8(0x25); return;
|
||||
case 1: writer.Write8(0x26); return;
|
||||
case 0: WriteINT0(); return;
|
||||
case 1: WriteINT1(); return;
|
||||
}
|
||||
writer.Write8(0x00);
|
||||
writer.WriteS32(value);
|
||||
mWriter.Write8(0x00);
|
||||
mWriter.WriteS32(value);
|
||||
}
|
||||
public void PushFloat(float value) {
|
||||
writer.Write8(0x01);
|
||||
writer.WriteF32(value);
|
||||
public void WriteFLT(float value) {
|
||||
mWriter.Write8(0x01);
|
||||
mWriter.WriteF32(value);
|
||||
}
|
||||
public void PushData(int dataIndex) {
|
||||
writer.Write8(0x02);
|
||||
writer.WriteS32(dataIndex);
|
||||
public void WriteSTR(int index) {
|
||||
mWriter.Write8(0x02);
|
||||
mWriter.WriteS32(index);
|
||||
}
|
||||
public void PushAddress(int value) {
|
||||
writer.Write8(0x03);
|
||||
writer.WriteS32(value);
|
||||
public void WriteADR(int value) {
|
||||
mWriter.Write8(0x03);
|
||||
mWriter.WriteS32(value);
|
||||
}
|
||||
public void PushVariable(sunVariableSymbol variableInfo) { PushVariable(variableInfo.Display, variableInfo.Index); }
|
||||
public void PushVariable(int display, int variableIndex) {
|
||||
writer.Write8(0x04);
|
||||
writer.WriteS32(display);
|
||||
writer.WriteS32(variableIndex);
|
||||
public void WriteVAR(int display, int index) {
|
||||
mWriter.Write8(0x04);
|
||||
mWriter.WriteS32(display);
|
||||
mWriter.WriteS32(index);
|
||||
}
|
||||
public void Nop() { writer.Write8(0x05); }
|
||||
public void IncVariable(sunVariableSymbol variableInfo) { IncVariable(variableInfo.Display, variableInfo.Index); }
|
||||
public void DecVariable(sunVariableSymbol variableInfo) { DecVariable(variableInfo.Display, variableInfo.Index); }
|
||||
public void IncVariable(int display, int variableIndex) {
|
||||
writer.Write8(0x06);
|
||||
writer.WriteS32(display);
|
||||
writer.WriteS32(variableIndex);
|
||||
public void WriteNOP() { mWriter.Write8(0x05); }
|
||||
public void WriteINC(int display, int index) {
|
||||
mWriter.Write8(0x06);
|
||||
mWriter.WriteS32(display);
|
||||
mWriter.WriteS32(index);
|
||||
}
|
||||
public void DecVariable(int display, int variableIndex) {
|
||||
writer.Write8(0x07);
|
||||
writer.WriteS32(display);
|
||||
writer.WriteS32(variableIndex);
|
||||
public void WriteDEC(int display, int index) {
|
||||
mWriter.Write8(0x07);
|
||||
mWriter.WriteS32(display);
|
||||
mWriter.WriteS32(index);
|
||||
}
|
||||
|
||||
public void Add() { writer.Write8(0x08); }
|
||||
public void Sub() { writer.Write8(0x09); }
|
||||
public void Mul() { writer.Write8(0x0A); }
|
||||
public void Div() { writer.Write8(0x0B); }
|
||||
public void Mod() { writer.Write8(0x0C); }
|
||||
|
||||
public void StoreVariable(sunVariableSymbol variableInfo) { StoreVariable(variableInfo.Display, variableInfo.Index); }
|
||||
public void StoreVariable(int display, int variableIndex) {
|
||||
writer.Write8(0x0D);
|
||||
writer.Write8(0x04); // unused (skipped over by TSpcInterp)
|
||||
writer.WriteS32(display);
|
||||
writer.WriteS32(variableIndex);
|
||||
public void WriteADD() { mWriter.Write8(0x08); }
|
||||
public void WriteSUB() { mWriter.Write8(0x09); }
|
||||
public void WriteMUL() { mWriter.Write8(0x0A); }
|
||||
public void WriteDIV() { mWriter.Write8(0x0B); }
|
||||
public void WriteMOD() { mWriter.Write8(0x0C); }
|
||||
public void WriteASS(int display, int index) {
|
||||
mWriter.Write8(0x0D);
|
||||
mWriter.Write8(0x04); // unused (skipped over by TSpcInterp)
|
||||
mWriter.WriteS32(display);
|
||||
mWriter.WriteS32(index);
|
||||
}
|
||||
|
||||
public void Eq() { writer.Write8(0x0E); }
|
||||
public void NtEq() { writer.Write8(0x0F); }
|
||||
public void Gt() { writer.Write8(0x10); }
|
||||
public void Lt() { writer.Write8(0x11); }
|
||||
public void GtEq() { writer.Write8(0x12); }
|
||||
public void LtEq() { writer.Write8(0x13); }
|
||||
public void Neg() { writer.Write8(0x14); }
|
||||
public void LogNOT() { writer.Write8(0x15); }
|
||||
public void LogAND() { writer.Write8(0x16); }
|
||||
public void LogOR() { writer.Write8(0x17); }
|
||||
public void BitAND() { writer.Write8(0x18); }
|
||||
public void BitOR() { writer.Write8(0x19); }
|
||||
public void ShL() { writer.Write8(0x1A); }
|
||||
public void ShR() { writer.Write8(0x1B); }
|
||||
|
||||
public sunPoint CallFunction(int argumentCount) {
|
||||
writer.Write8(0x1C);
|
||||
public void WriteEQ() { mWriter.Write8(0x0E); }
|
||||
public void WriteNE() { mWriter.Write8(0x0F); }
|
||||
public void WriteGT() { mWriter.Write8(0x10); }
|
||||
public void WriteLT() { mWriter.Write8(0x11); }
|
||||
public void WriteGE() { mWriter.Write8(0x12); }
|
||||
public void WriteLE() { mWriter.Write8(0x13); }
|
||||
public void WriteNEG() { mWriter.Write8(0x14); }
|
||||
public void WriteNOT() { mWriter.Write8(0x15); }
|
||||
public void WriteAND() { mWriter.Write8(0x16); }
|
||||
public void WriteOR() { mWriter.Write8(0x17); }
|
||||
public void WriteBAND() { mWriter.Write8(0x18); }
|
||||
public void WriteBOR() { mWriter.Write8(0x19); }
|
||||
public void WriteSHL() { mWriter.Write8(0x1A); }
|
||||
public void WriteSHR() { mWriter.Write8(0x1B); }
|
||||
public sunPoint WriteCALL(int count) {
|
||||
mWriter.Write8(0x1C);
|
||||
sunPoint point = OpenPoint();
|
||||
writer.Write32(0); // dummy
|
||||
writer.WriteS32(argumentCount);
|
||||
mWriter.Write32(0); // dummy
|
||||
mWriter.WriteS32(count);
|
||||
return point;
|
||||
}
|
||||
public void CallFunction(sunPoint point, int argumentCount) {
|
||||
writer.Write8(0x1C);
|
||||
writer.Write32(point.Offset);
|
||||
writer.WriteS32(argumentCount);
|
||||
public void WriteCALL(sunPoint point, int count) {
|
||||
mWriter.Write8(0x1C);
|
||||
mWriter.Write32(point.Offset);
|
||||
mWriter.WriteS32(count);
|
||||
}
|
||||
public void CallBuiltin(int symbolIndex, int argumentCount) {
|
||||
writer.Write8(0x1D);
|
||||
writer.WriteS32(symbolIndex);
|
||||
writer.WriteS32(argumentCount);
|
||||
public void WriteFUNC(int index, int count) {
|
||||
mWriter.Write8(0x1D);
|
||||
mWriter.WriteS32(index);
|
||||
mWriter.WriteS32(count);
|
||||
}
|
||||
|
||||
public void DeclareLocal(int count) {
|
||||
writer.Write8(0x1E);
|
||||
writer.WriteS32(count);
|
||||
public void WriteMKFR(int count) {
|
||||
mWriter.Write8(0x1E);
|
||||
mWriter.WriteS32(count);
|
||||
}
|
||||
public void StoreDisplay(int display) {
|
||||
writer.Write8(0x1F);
|
||||
writer.WriteS32(display);
|
||||
public void WriteMKDS(int display) {
|
||||
mWriter.Write8(0x1F);
|
||||
mWriter.WriteS32(display);
|
||||
}
|
||||
|
||||
public void ReturnValue() { writer.Write8(0x20); }
|
||||
public void ReturnVoid() { writer.Write8(0x21); }
|
||||
|
||||
public sunPoint GotoIfZero() {
|
||||
writer.Write8(0x22);
|
||||
public void WriteRET() { mWriter.Write8(0x20); }
|
||||
public void WriteRET0() { mWriter.Write8(0x21); }
|
||||
public sunPoint WriteJNE() {
|
||||
mWriter.Write8(0x22);
|
||||
sunPoint point = OpenPoint();
|
||||
writer.Write32(0); // dummy
|
||||
mWriter.Write32(0); // dummy
|
||||
return point;
|
||||
}
|
||||
public sunPoint Goto() {
|
||||
writer.Write8(0x23);
|
||||
public sunPoint WriteJMP() {
|
||||
mWriter.Write8(0x23);
|
||||
sunPoint point = OpenPoint();
|
||||
writer.Write32(0); // dummy
|
||||
mWriter.Write32(0); // dummy
|
||||
return point;
|
||||
}
|
||||
public void GotoIfZero(sunPoint point) {
|
||||
writer.Write8(0x22);
|
||||
writer.Write32(point.Offset);
|
||||
public void WriteJNE(sunPoint point) {
|
||||
mWriter.Write8(0x22);
|
||||
mWriter.Write32(point.Offset);
|
||||
}
|
||||
public void Goto(sunPoint point) {
|
||||
writer.Write8(0x23);
|
||||
writer.Write32(point.Offset);
|
||||
public void WriteJMP(sunPoint point) {
|
||||
mWriter.Write8(0x23);
|
||||
mWriter.Write32(point.Offset);
|
||||
}
|
||||
public void Pop() { writer.Write8(0x24); }
|
||||
|
||||
public void Terminate() { writer.Write8(0x27); }
|
||||
public void WritePOP() { mWriter.Write8(0x24); }
|
||||
public void WriteINT0() { mWriter.Write8(0x25); }
|
||||
public void WriteINT1() { mWriter.Write8(0x26); }
|
||||
public void WriteEND() { mWriter.Write8(0x27); }
|
||||
}
|
||||
|
||||
struct sunPoint {
|
||||
readonly uint offset;
|
||||
public uint Offset { get { return offset; } }
|
||||
readonly uint mOffset;
|
||||
public uint Offset { get { return mOffset; } }
|
||||
|
||||
public sunPoint(uint offset) {
|
||||
this.offset = offset;
|
||||
mOffset = offset;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue