Skip to content

Commit

Permalink
[Lobster] support unsigned integer reads
Browse files Browse the repository at this point in the history
(depends on the latest Lobster version)
  • Loading branch information
aardappel committed Mar 8, 2022
1 parent 4016c54 commit 777e78d
Show file tree
Hide file tree
Showing 4 changed files with 49 additions and 46 deletions.
4 changes: 2 additions & 2 deletions samples/monster_generated.lobster
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class Monster : flatbuffers_handle
def name():
return buf_.flatbuffers_field_string(pos_, 10)
def inventory(i:int):
return buf_.read_int8_le(buf_.flatbuffers_field_vector(pos_, 14) + i * 1)
return buf_.read_uint8_le(buf_.flatbuffers_field_vector(pos_, 14) + i * 1)
def inventory_length():
return buf_.flatbuffers_field_vector_len(pos_, 14)
def color():
Expand All @@ -54,7 +54,7 @@ class Monster : flatbuffers_handle
def weapons_length():
return buf_.flatbuffers_field_vector_len(pos_, 18)
def equipped_type():
return Equipment(buf_.flatbuffers_field_int8(pos_, 20, 0))
return Equipment(buf_.flatbuffers_field_uint8(pos_, 20, 0))
def equipped_as_Weapon():
return MyGame_Sample_Weapon { buf_, buf_.flatbuffers_field_table(pos_, 22) }
def path(i:int):
Expand Down
5 changes: 4 additions & 1 deletion src/idl_gen_lobster.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,10 @@ class LobsterGenerator : public BaseGenerator {

std::string GenTypeName(const Type &type) {
auto bits = NumToString(SizeOf(type.base_type) * 8);
if (IsInteger(type.base_type)) return "int" + bits;
if (IsInteger(type.base_type)) {
if (IsUnsigned(type.base_type)) return "uint" + bits;
else return "int" + bits;
}
if (IsFloat(type.base_type)) return "float" + bits;
if (IsString(type)) return "string";
if (type.base_type == BASE_TYPE_STRUCT) return "table";
Expand Down
62 changes: 31 additions & 31 deletions tests/monster_test_generated.lobster
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ def CreateTest(b_:flatbuffers_builder, a:int, b:int):

class TestSimpleTableWithEnum : flatbuffers_handle
def color():
return Color(buf_.flatbuffers_field_int8(pos_, 4, 2))
return Color(buf_.flatbuffers_field_uint8(pos_, 4, 2))

def GetRootAsTestSimpleTableWithEnum(buf:string): return TestSimpleTableWithEnum { buf, buf.flatbuffers_indirect(0) }

Expand All @@ -139,7 +139,7 @@ class Vec3 : flatbuffers_handle
def test1():
return buf_.read_float64_le(pos_ + 16)
def test2():
return Color(buf_.read_int8_le(pos_ + 24))
return Color(buf_.read_uint8_le(pos_ + 24))
def test3():
return MyGame_Example_Test{ buf_, pos_ + 26 }

Expand All @@ -161,9 +161,9 @@ def CreateVec3(b_:flatbuffers_builder, x:float, y:float, z:float, test1:float, t

class Ability : flatbuffers_handle
def id():
return buf_.read_int32_le(pos_ + 0)
return buf_.read_uint32_le(pos_ + 0)
def distance():
return buf_.read_int32_le(pos_ + 4)
return buf_.read_uint32_le(pos_ + 4)

def CreateAbility(b_:flatbuffers_builder, id:int, distance:int):
b_.Prep(4, 8)
Expand Down Expand Up @@ -199,7 +199,7 @@ class Stat : flatbuffers_handle
def val():
return buf_.flatbuffers_field_int64(pos_, 6, 0)
def count():
return buf_.flatbuffers_field_int16(pos_, 8, 0)
return buf_.flatbuffers_field_uint16(pos_, 8, 0)

def GetRootAsStat(buf:string): return Stat { buf, buf.flatbuffers_indirect(0) }

Expand All @@ -222,7 +222,7 @@ struct StatBuilder:

class Referrable : flatbuffers_handle
def id():
return buf_.flatbuffers_field_int64(pos_, 4, 0)
return buf_.flatbuffers_field_uint64(pos_, 4, 0)

def GetRootAsReferrable(buf:string): return Referrable { buf, buf.flatbuffers_indirect(0) }

Expand All @@ -249,13 +249,13 @@ class Monster : flatbuffers_handle
def name():
return buf_.flatbuffers_field_string(pos_, 10)
def inventory(i:int):
return buf_.read_int8_le(buf_.flatbuffers_field_vector(pos_, 14) + i * 1)
return buf_.read_uint8_le(buf_.flatbuffers_field_vector(pos_, 14) + i * 1)
def inventory_length():
return buf_.flatbuffers_field_vector_len(pos_, 14)
def color():
return Color(buf_.flatbuffers_field_int8(pos_, 16, 8))
return Color(buf_.flatbuffers_field_uint8(pos_, 16, 8))
def test_type():
return Any(buf_.flatbuffers_field_int8(pos_, 18, 0))
return Any(buf_.flatbuffers_field_uint8(pos_, 18, 0))
def test_as_Monster():
return MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 20) }
def test_as_TestSimpleTableWithEnum():
Expand All @@ -280,7 +280,7 @@ class Monster : flatbuffers_handle
let o = buf_.flatbuffers_field_table(pos_, 28)
return if o: MyGame_Example_Monster { buf_, o } else: nil
def testnestedflatbuffer(i:int):
return buf_.read_int8_le(buf_.flatbuffers_field_vector(pos_, 30) + i * 1)
return buf_.read_uint8_le(buf_.flatbuffers_field_vector(pos_, 30) + i * 1)
def testnestedflatbuffer_length():
return buf_.flatbuffers_field_vector_len(pos_, 30)
def testempty():
Expand All @@ -291,19 +291,19 @@ class Monster : flatbuffers_handle
def testhashs32_fnv1():
return buf_.flatbuffers_field_int32(pos_, 36, 0)
def testhashu32_fnv1():
return buf_.flatbuffers_field_int32(pos_, 38, 0)
return buf_.flatbuffers_field_uint32(pos_, 38, 0)
def testhashs64_fnv1():
return buf_.flatbuffers_field_int64(pos_, 40, 0)
def testhashu64_fnv1():
return buf_.flatbuffers_field_int64(pos_, 42, 0)
return buf_.flatbuffers_field_uint64(pos_, 42, 0)
def testhashs32_fnv1a():
return buf_.flatbuffers_field_int32(pos_, 44, 0)
def testhashu32_fnv1a():
return buf_.flatbuffers_field_int32(pos_, 46, 0)
return buf_.flatbuffers_field_uint32(pos_, 46, 0)
def testhashs64_fnv1a():
return buf_.flatbuffers_field_int64(pos_, 48, 0)
def testhashu64_fnv1a():
return buf_.flatbuffers_field_int64(pos_, 50, 0)
return buf_.flatbuffers_field_uint64(pos_, 50, 0)
def testarrayofbools(i:int):
return buf_.read_int8_le(buf_.flatbuffers_field_vector(pos_, 52) + i * 1)
def testarrayofbools_length():
Expand All @@ -323,7 +323,7 @@ class Monster : flatbuffers_handle
def testarrayofsortedstruct_length():
return buf_.flatbuffers_field_vector_len(pos_, 62)
def flex(i:int):
return buf_.read_int8_le(buf_.flatbuffers_field_vector(pos_, 64) + i * 1)
return buf_.read_uint8_le(buf_.flatbuffers_field_vector(pos_, 64) + i * 1)
def flex_length():
return buf_.flatbuffers_field_vector_len(pos_, 64)
def test5(i:int):
Expand All @@ -346,51 +346,51 @@ class Monster : flatbuffers_handle
def vector_of_referrables_length():
return buf_.flatbuffers_field_vector_len(pos_, 74)
def single_weak_reference():
return buf_.flatbuffers_field_int64(pos_, 76, 0)
return buf_.flatbuffers_field_uint64(pos_, 76, 0)
def vector_of_weak_references(i:int):
return buf_.read_int64_le(buf_.flatbuffers_field_vector(pos_, 78) + i * 8)
return buf_.read_uint64_le(buf_.flatbuffers_field_vector(pos_, 78) + i * 8)
def vector_of_weak_references_length():
return buf_.flatbuffers_field_vector_len(pos_, 78)
def vector_of_strong_referrables(i:int):
return MyGame_Example_Referrable { buf_, buf_.flatbuffers_indirect(buf_.flatbuffers_field_vector(pos_, 80) + i * 4) }
def vector_of_strong_referrables_length():
return buf_.flatbuffers_field_vector_len(pos_, 80)
def co_owning_reference():
return buf_.flatbuffers_field_int64(pos_, 82, 0)
return buf_.flatbuffers_field_uint64(pos_, 82, 0)
def vector_of_co_owning_references(i:int):
return buf_.read_int64_le(buf_.flatbuffers_field_vector(pos_, 84) + i * 8)
return buf_.read_uint64_le(buf_.flatbuffers_field_vector(pos_, 84) + i * 8)
def vector_of_co_owning_references_length():
return buf_.flatbuffers_field_vector_len(pos_, 84)
def non_owning_reference():
return buf_.flatbuffers_field_int64(pos_, 86, 0)
return buf_.flatbuffers_field_uint64(pos_, 86, 0)
def vector_of_non_owning_references(i:int):
return buf_.read_int64_le(buf_.flatbuffers_field_vector(pos_, 88) + i * 8)
return buf_.read_uint64_le(buf_.flatbuffers_field_vector(pos_, 88) + i * 8)
def vector_of_non_owning_references_length():
return buf_.flatbuffers_field_vector_len(pos_, 88)
def any_unique_type():
return AnyUniqueAliases(buf_.flatbuffers_field_int8(pos_, 90, 0))
return AnyUniqueAliases(buf_.flatbuffers_field_uint8(pos_, 90, 0))
def any_unique_as_M():
return MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 92) }
def any_unique_as_TS():
return MyGame_Example_TestSimpleTableWithEnum { buf_, buf_.flatbuffers_field_table(pos_, 92) }
def any_unique_as_M2():
return MyGame_Example2_Monster { buf_, buf_.flatbuffers_field_table(pos_, 92) }
def any_ambiguous_type():
return AnyAmbiguousAliases(buf_.flatbuffers_field_int8(pos_, 94, 0))
return AnyAmbiguousAliases(buf_.flatbuffers_field_uint8(pos_, 94, 0))
def any_ambiguous_as_M1():
return MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 96) }
def any_ambiguous_as_M2():
return MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 96) }
def any_ambiguous_as_M3():
return MyGame_Example_Monster { buf_, buf_.flatbuffers_field_table(pos_, 96) }
def vector_of_enums(i:int):
return buf_.read_int8_le(buf_.flatbuffers_field_vector(pos_, 98) + i * 1)
return buf_.read_uint8_le(buf_.flatbuffers_field_vector(pos_, 98) + i * 1)
def vector_of_enums_length():
return buf_.flatbuffers_field_vector_len(pos_, 98)
def signed_enum():
return Race(buf_.flatbuffers_field_int8(pos_, 100, -1))
def testrequirednestedflatbuffer(i:int):
return buf_.read_int8_le(buf_.flatbuffers_field_vector(pos_, 102) + i * 1)
return buf_.read_uint8_le(buf_.flatbuffers_field_vector(pos_, 102) + i * 1)
def testrequirednestedflatbuffer_length():
return buf_.flatbuffers_field_vector_len(pos_, 102)
def scalar_key_sorted_tables(i:int):
Expand All @@ -401,9 +401,9 @@ class Monster : flatbuffers_handle
let o = buf_.flatbuffers_field_struct(pos_, 106)
return if o: MyGame_Example_Test { buf_, o } else: nil
def long_enum_non_enum_default():
return LongEnum(buf_.flatbuffers_field_int64(pos_, 108, 0))
return LongEnum(buf_.flatbuffers_field_uint64(pos_, 108, 0))
def long_enum_normal_default():
return LongEnum(buf_.flatbuffers_field_int64(pos_, 110, 2))
return LongEnum(buf_.flatbuffers_field_uint64(pos_, 110, 2))

def GetRootAsMonster(buf:string): return Monster { buf, buf.flatbuffers_indirect(0) }

Expand Down Expand Up @@ -706,19 +706,19 @@ class TypeAliases : flatbuffers_handle
def i8():
return buf_.flatbuffers_field_int8(pos_, 4, 0)
def u8():
return buf_.flatbuffers_field_int8(pos_, 6, 0)
return buf_.flatbuffers_field_uint8(pos_, 6, 0)
def i16():
return buf_.flatbuffers_field_int16(pos_, 8, 0)
def u16():
return buf_.flatbuffers_field_int16(pos_, 10, 0)
return buf_.flatbuffers_field_uint16(pos_, 10, 0)
def i32():
return buf_.flatbuffers_field_int32(pos_, 12, 0)
def u32():
return buf_.flatbuffers_field_int32(pos_, 14, 0)
return buf_.flatbuffers_field_uint32(pos_, 14, 0)
def i64():
return buf_.flatbuffers_field_int64(pos_, 16, 0)
def u64():
return buf_.flatbuffers_field_int64(pos_, 18, 0)
return buf_.flatbuffers_field_uint64(pos_, 18, 0)
def f32():
return buf_.flatbuffers_field_float32(pos_, 20, 0.0)
def f64():
Expand Down
24 changes: 12 additions & 12 deletions tests/optional_scalars_generated.lobster
Original file line number Diff line number Diff line change
Expand Up @@ -18,47 +18,47 @@ class ScalarStuff : flatbuffers_handle
def default_i8():
return buf_.flatbuffers_field_int8(pos_, 8, 42)
def just_u8():
return buf_.flatbuffers_field_int8(pos_, 10, 0)
return buf_.flatbuffers_field_uint8(pos_, 10, 0)
def maybe_u8():
return buf_.flatbuffers_field_int8(pos_, 12, 0), buf_.flatbuffers_field_present(pos_, 12)
return buf_.flatbuffers_field_uint8(pos_, 12, 0), buf_.flatbuffers_field_present(pos_, 12)
def default_u8():
return buf_.flatbuffers_field_int8(pos_, 14, 42)
return buf_.flatbuffers_field_uint8(pos_, 14, 42)
def just_i16():
return buf_.flatbuffers_field_int16(pos_, 16, 0)
def maybe_i16():
return buf_.flatbuffers_field_int16(pos_, 18, 0), buf_.flatbuffers_field_present(pos_, 18)
def default_i16():
return buf_.flatbuffers_field_int16(pos_, 20, 42)
def just_u16():
return buf_.flatbuffers_field_int16(pos_, 22, 0)
return buf_.flatbuffers_field_uint16(pos_, 22, 0)
def maybe_u16():
return buf_.flatbuffers_field_int16(pos_, 24, 0), buf_.flatbuffers_field_present(pos_, 24)
return buf_.flatbuffers_field_uint16(pos_, 24, 0), buf_.flatbuffers_field_present(pos_, 24)
def default_u16():
return buf_.flatbuffers_field_int16(pos_, 26, 42)
return buf_.flatbuffers_field_uint16(pos_, 26, 42)
def just_i32():
return buf_.flatbuffers_field_int32(pos_, 28, 0)
def maybe_i32():
return buf_.flatbuffers_field_int32(pos_, 30, 0), buf_.flatbuffers_field_present(pos_, 30)
def default_i32():
return buf_.flatbuffers_field_int32(pos_, 32, 42)
def just_u32():
return buf_.flatbuffers_field_int32(pos_, 34, 0)
return buf_.flatbuffers_field_uint32(pos_, 34, 0)
def maybe_u32():
return buf_.flatbuffers_field_int32(pos_, 36, 0), buf_.flatbuffers_field_present(pos_, 36)
return buf_.flatbuffers_field_uint32(pos_, 36, 0), buf_.flatbuffers_field_present(pos_, 36)
def default_u32():
return buf_.flatbuffers_field_int32(pos_, 38, 42)
return buf_.flatbuffers_field_uint32(pos_, 38, 42)
def just_i64():
return buf_.flatbuffers_field_int64(pos_, 40, 0)
def maybe_i64():
return buf_.flatbuffers_field_int64(pos_, 42, 0), buf_.flatbuffers_field_present(pos_, 42)
def default_i64():
return buf_.flatbuffers_field_int64(pos_, 44, 42)
def just_u64():
return buf_.flatbuffers_field_int64(pos_, 46, 0)
return buf_.flatbuffers_field_uint64(pos_, 46, 0)
def maybe_u64():
return buf_.flatbuffers_field_int64(pos_, 48, 0), buf_.flatbuffers_field_present(pos_, 48)
return buf_.flatbuffers_field_uint64(pos_, 48, 0), buf_.flatbuffers_field_present(pos_, 48)
def default_u64():
return buf_.flatbuffers_field_int64(pos_, 50, 42)
return buf_.flatbuffers_field_uint64(pos_, 50, 42)
def just_f32():
return buf_.flatbuffers_field_float32(pos_, 52, 0.0)
def maybe_f32():
Expand Down

0 comments on commit 777e78d

Please sign in to comment.