Skip to content

Commit c53bb87

Browse files
[[ ExternalsApiV6 ]] Java unicode handled
1 parent 4ee24ec commit c53bb87

File tree

8 files changed

+331
-80
lines changed

8 files changed

+331
-80
lines changed

lcidlc/src/InterfaceGenerate.cpp

Lines changed: 38 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -139,9 +139,17 @@ static NativeType map_native_type(HandlerMapping p_mapping, NameRef p_type)
139139
switch(NativeTypeFromName(p_type))
140140
{
141141
case kNativeTypeCString:
142-
return kNativeTypeJavaString;
142+
return kNativeTypeJavaString;
143+
case kNativeTypeUTF8CString:
144+
return kNativeTypeJavaUTF8String;
145+
case kNativeTypeUTF16CString:
146+
return kNativeTypeJavaUTF16String;
143147
case kNativeTypeCData:
144148
return kNativeTypeJavaData;
149+
case kNativeTypeUTF8CData:
150+
return kNativeTypeJavaUTF8Data;
151+
case kNativeTypeUTF16CData:
152+
return kNativeTypeJavaUTF16Data;
145153
}
146154
}
147155

@@ -496,6 +504,11 @@ class EnumTypeMapper: public TypeMapper
496504
class JavaStringTypeMapper: public TypeMapper
497505
{
498506
public:
507+
JavaStringTypeMapper(NativeType p_type)
508+
{
509+
m_tag = NativeTypeGetTag(p_type);
510+
}
511+
499512
virtual const char *GetTypedef(ParameterType type)
500513
{
501514
return "__INTERNAL_ERROR__";
@@ -509,7 +522,7 @@ class JavaStringTypeMapper: public TypeMapper
509522

510523
virtual void Fetch(CoderRef p_coder, ParameterType p_mode, const char *p_name, const char *p_source)
511524
{
512-
CoderWriteStatement(p_coder, "success = fetch__java_string(__java_env, name__%s, %s, %s)", p_name, p_source, p_name);
525+
CoderWriteStatement(p_coder, "success = fetch__%s(__java_env, name__%s, %s, %s)", m_tag, p_name, p_source, p_name);
513526
}
514527

515528
virtual void Default(CoderRef p_coder, ParameterType p_mode, const char *p_name, ValueRef p_value)
@@ -519,18 +532,27 @@ class JavaStringTypeMapper: public TypeMapper
519532

520533
virtual void Store(CoderRef p_coder, ParameterType p_mode, const char *p_name, const char *p_target)
521534
{
522-
CoderWriteStatement(p_coder, "success = store__java_string(__java_env, %s, %s)", p_target, p_name);
535+
CoderWriteStatement(p_coder, "success = store__%s(__java_env, %s, %s)", m_tag, p_target, p_name);
523536
}
524537

525538
virtual void Finalize(CoderRef p_coder, ParameterType p_mode, const char *p_name)
526539
{
527540
CoderWriteStatement(p_coder, "free__java_string(__java_env, %s)", p_name);
528541
}
542+
543+
private:
544+
const char* m_tag;
529545
};
530546

531547
class JavaDataTypeMapper: public TypeMapper
532548
{
533549
public:
550+
551+
JavaDataTypeMapper(NativeType p_type)
552+
{
553+
m_tag = NativeTypeGetTag(p_type);
554+
}
555+
534556
virtual const char *GetTypedef(ParameterType type)
535557
{
536558
return "__INTERNAL_ERROR__";
@@ -544,7 +566,7 @@ class JavaDataTypeMapper: public TypeMapper
544566

545567
virtual void Fetch(CoderRef p_coder, ParameterType p_mode, const char *p_name, const char *p_source)
546568
{
547-
CoderWriteStatement(p_coder, "success = fetch__java_data(__java_env, name__%s, %s, %s)", p_name, p_source, p_name);
569+
CoderWriteStatement(p_coder, "success = fetch__%s(__java_env, name__%s, %s, %s)", m_tag, p_name, p_source, p_name);
548570
}
549571

550572
virtual void Default(CoderRef p_coder, ParameterType p_mode, const char *p_name, ValueRef p_value)
@@ -554,13 +576,16 @@ class JavaDataTypeMapper: public TypeMapper
554576

555577
virtual void Store(CoderRef p_coder, ParameterType p_mode, const char *p_name, const char *p_target)
556578
{
557-
CoderWriteStatement(p_coder, "success = store__java_data(__java_env, %s, %s)", p_target, p_name);
579+
CoderWriteStatement(p_coder, "success = store__%s(__java_env, %s, %s)", m_tag, p_target, p_name);
558580
}
559581

560582
virtual void Finalize(CoderRef p_coder, ParameterType p_mode, const char *p_name)
561583
{
562584
CoderWriteStatement(p_coder, "free__java_data(__java_env, %s)", p_name);
563585
}
586+
587+
private:
588+
const char* m_tag;
564589
};
565590

566591
////////////////////////////////////////////////////////////////////////////////
@@ -1096,8 +1121,14 @@ static TypeMapper *map_parameter_type(InterfaceRef self, HandlerMapping p_mappin
10961121
case kNativeTypeObjcData: return new ObjcDataTypeMapper;
10971122
case kNativeTypeObjcArray: return new ObjcArrayTypeMapper;
10981123
case kNativeTypeObjcDictionary: return new ObjcDictionaryTypeMapper;
1099-
case kNativeTypeJavaString: return new JavaStringTypeMapper;
1100-
case kNativeTypeJavaData: return new JavaDataTypeMapper;
1124+
case kNativeTypeJavaString:
1125+
case kNativeTypeJavaUTF8String:
1126+
case kNativeTypeJavaUTF16String:
1127+
return new JavaStringTypeMapper(t_type);
1128+
case kNativeTypeJavaData:
1129+
case kNativeTypeJavaUTF8Data:
1130+
case kNativeTypeJavaUTF16Data:
1131+
return new JavaDataTypeMapper(t_type);
11011132
}
11021133
return nil;
11031134
}

lcidlc/src/NativeType.cpp

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,10 +85,14 @@ const char *NativeTypeGetTypedef(NativeType p_type)
8585
case kNativeTypeObjcDictionary:
8686
return "NSDictionary*";
8787
case kNativeTypeJavaString:
88+
case kNativeTypeJavaUTF8String:
89+
case kNativeTypeJavaUTF16String:
8890
return "jstring";
8991
case kNativeTypeJavaNumber:
9092
return "jobject";
9193
case kNativeTypeJavaData:
94+
case kNativeTypeJavaUTF8Data:
95+
case kNativeTypeJavaUTF16Data:
9296
return "jobject";
9397
case kNativeTypeJavaArray:
9498
return "jobject";
@@ -153,15 +157,24 @@ const char *NativeTypeGetTag(NativeType p_type)
153157
case kNativeTypeObjcDictionary:
154158
return "objc_dictionary";
155159
case kNativeTypeJavaString:
156-
return "java_string";
160+
return "java_cstring";
157161
case kNativeTypeJavaNumber:
158162
return "java_number";
159163
case kNativeTypeJavaData:
160-
return "java_data";
164+
return "java_cdata";
161165
case kNativeTypeJavaArray:
162166
return "java_array";
163167
case kNativeTypeJavaDictionary:
164168
return "java_dictionary";
169+
// SN-2014-07-17: [[ ExternalsApiV6 ]] New getter for unicode strings
170+
case kNativeTypeJavaUTF8String:
171+
return "java_utf8cstring";
172+
case kNativeTypeJavaUTF16String:
173+
return "java_utf16cstring";
174+
case kNativeTypeJavaUTF8Data:
175+
return "java_utf8cdata";
176+
case kNativeTypeJavaUTF16Data:
177+
return "java_utf16cdata";
165178
default:
166179
break;
167180
}
@@ -183,8 +196,12 @@ const char *NativeTypeGetInitializer(NativeType p_type)
183196
case kNativeTypeObjcArray:
184197
case kNativeTypeObjcDictionary:
185198
case kNativeTypeJavaString:
199+
case kNativeTypeJavaUTF8String:
200+
case kNativeTypeJavaUTF16String:
186201
case kNativeTypeJavaNumber:
187202
case kNativeTypeJavaData:
203+
case kNativeTypeJavaUTF8Data:
204+
case kNativeTypeJavaUTF16Data:
188205
case kNativeTypeJavaArray:
189206
case kNativeTypeJavaDictionary:
190207
return "nil";

lcidlc/src/NativeType.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,11 @@ enum NativeType
4646
kNativeTypeJavaData,
4747
kNativeTypeJavaArray,
4848
kNativeTypeJavaDictionary,
49+
// SN-22014-07-17: [[ ExternalsApiV6 ]] Added Java unicode types
50+
kNativeTypeJavaUTF8String,
51+
kNativeTypeJavaUTF16String,
52+
kNativeTypeJavaUTF8Data,
53+
kNativeTypeJavaUTF16Data,
4954
};
5055

5156
NativeType NativeTypeFromName(NameRef p_type);

0 commit comments

Comments
 (0)