Renamed sunWriter writing methods to match the command names in TSpcInterp.

This commit is contained in:
arookas 2015-12-28 20:35:16 -05:00
parent 2ce9882cad
commit 72ea2a031c
9 changed files with 171 additions and 181 deletions

View file

@ -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);

View file

@ -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);
}

View file

@ -44,7 +44,7 @@ namespace arookas {
Arguments.Compile(context);
callableInfo.OpenCallSite(context, Arguments.Count);
if (IsStatement) {
context.Text.Pop();
context.Text.WritePOP();
}
}

View file

@ -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

View file

@ -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);
}
}

View file

@ -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();
}
}
}

View file

@ -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);
}

View file

@ -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 {

View file

@ -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;
}
}
}