end
end
+redef class IIntValue
+ redef fun dump_intern(icd)
+ do
+ return "INTVALUE {value}"
+ end
+end
+
+redef class IBoolValue
+ redef fun dump_intern(icd)
+ do
+ return "BOOLVALUE {value}"
+ end
+end
+
+redef class IStringValue
+ redef fun dump_intern(icd)
+ do
+ return "STRINGVALUE {value}"
+ end
+end
+
+redef class ICharValue
+ redef fun dump_intern(icd)
+ do
+ return "CHARVALUE {value}"
+ end
+end
+
+redef class IFloatValue
+ redef fun dump_intern(icd)
+ do
+ return "FLOATVALUE {value}"
+ end
+end
+
redef class IMove
redef fun dump_intern(icd)
do
if ic isa IAttrIsset then
var result = ic.result
assert result != null
- var e = new INative("TAG_Bool(true)", null)
- e.is_pure = true
+ var e = new IBoolValue(true)
e.result = result
current_icode.insert_before(e)
current_icode.delete
end
end
+redef class IIntValue
+ redef fun compile_to_c(v)
+ do
+ v.add_location(location)
+ var w = new_result(v)
+ w.add("TAG_Int(").add(value.to_s).add(")")
+ end
+end
+
+redef class IBoolValue
+ redef fun compile_to_c(v)
+ do
+ v.add_location(location)
+ var w = new_result(v)
+ w.add("TAG_Bool(")
+ if value then w.add("true") else w.add("false")
+ w.add(")")
+ end
+end
+
+redef class ICharValue
+ redef fun compile_to_c(v)
+ do
+ v.add_location(location)
+ var w = new_result(v)
+ w.add("TAG_Char(").add(value).add(")")
+ end
+end
+
+redef class IFloatValue
+ redef fun compile_to_c(v)
+ do
+ v.add_location(location)
+ var w = new_result(v)
+ w.add("BOX_Float(").add(value).add(")")
+ end
+end
+
+redef class IStringValue
+ redef fun compile_to_c(v)
+ do
+ v.add_location(location)
+ var w = new_result(v)
+ w.add("BOX_NativeString(\"").add(value).add("\")")
+ end
+end
+
redef class IAbort
redef fun compile_to_c(v)
do
redef readable writable var _is_pure: Bool = false
end
+# A literal Int value
+class IIntValue
+special ICode0
+ # The value
+ readable var _value: String
+
+ init(v: String) do _value = v
+
+ redef fun is_pure do return true
+end
+
+# A literal Bool value
+class IBoolValue
+special ICode0
+ # The value
+ readable var _value: Bool
+
+ init(v: Bool) do _value = v
+
+ redef fun is_pure do return true
+end
+
+# A literal NativeString value
+class IStringValue
+special ICode0
+ # The value
+ readable var _value: String
+
+ init(v: String) do _value = v
+
+ redef fun is_pure do return true
+end
+
+# A literal Float value
+class IFloatValue
+special ICode0
+ # The value
+ readable var _value: String
+
+ init(v: String) do _value = v
+
+ redef fun is_pure do return true
+end
+
+# A literal Char value
+class ICharValue
+special ICode0
+ # The value
+ readable var _value: String
+
+ init(v: String) do _value = v
+
+ redef fun is_pure do return true
+end
+
# A register assigment
# expr is the assigned value
# result is the register assigned
# Return a literal "true" value
fun lit_true_reg: IRegister
do
- var e = new INative("TAG_Bool(true)", null)
- e.is_pure = true
+ var e = new IBoolValue(true)
return expr(e, module.type_bool)
end
# Return a literal "false" value
fun lit_false_reg: IRegister
do
- var e = new INative("TAG_Bool(false)", null)
- e.is_pure = true
+ var e = new IBoolValue(false)
return expr(e, module.type_bool)
end
end
end
+redef class IIntValue
+ redef fun inner_dup_with(d)
+ do
+ return new IIntValue(value)
+ end
+end
+
+redef class IBoolValue
+ redef fun inner_dup_with(d)
+ do
+ return new IBoolValue(value)
+ end
+end
+
+redef class IStringValue
+ redef fun inner_dup_with(d)
+ do
+ return new IStringValue(value)
+ end
+end
+
+redef class IFloatValue
+ redef fun inner_dup_with(d)
+ do
+ return new IFloatValue(value)
+ end
+end
+
+redef class ICharValue
+ redef fun inner_dup_with(d)
+ do
+ return new ICharValue(value)
+ end
+end
+
redef class IMove
redef fun inner_dup_with(d)
do
fun add_new_array(stype: MMType, length: Int): IRegister
do
var prop = visitor.get_method(stype, once "with_capacity".to_symbol)
- var ni = expr(new INative("TAG_Int({length})", null), visitor.type_int)
+ var ni = expr(new IIntValue(length.to_s), visitor.type_int)
return expr(new INew(stype, prop, [ni]), stype)
end
redef class AIntExpr
redef fun generate_icode(v)
do
- return v.expr(new INative("TAG_Int({n_number.text})", null), stype)
+ return v.expr(new IIntValue(n_number.text), stype)
end
end
redef class AFloatExpr
redef fun generate_icode(v)
do
- return v.expr(new INative("BOX_Float({n_float.text})", null), stype)
+ return v.expr(new IFloatValue(n_float.text), stype)
end
end
redef class ACharExpr
redef fun generate_icode(v)
do
- return v.expr(new INative("TAG_Char({n_char.text})", null), stype)
+ return v.expr(new ICharValue(n_char.text), stype)
end
end
var ionce = new IOnce
var reg = v.expr(ionce, stype)
v.seq = ionce.body
- var ns = v.expr(new INative("BOX_NativeString(\"{_cstring.as(not null)}\")", null), v.visitor.type_nativestring)
- var ni = v.expr(new INative("TAG_Int({_cstring_length.as(not null)})", null), v.visitor.type_int)
+ var ns = v.expr(new IStringValue(_cstring.as(not null)), v.visitor.type_nativestring)
+ var ni = v.expr(new IIntValue(_cstring_length.to_s), v.visitor.type_int)
var prop = v.visitor.get_method(stype, once "with_native".to_symbol)
var e = v.expr(new INew(stype, prop, [ns, ni]), stype)
v.add_assignment(reg, e)