# HG changeset patch
# User mir3636
# Date 1516460737 -32400
# Node ID 33222880db7922afb17006a4846c792199b10d44
# Parent 6df75cb95ddd84dda0fd9e56be1b6cd1f8161e45
update
diff -r 6df75cb95ddd -r 33222880db79 Slide/fig/generate_context3.pdf
Binary file Slide/fig/generate_context3.pdf has changed
diff -r 6df75cb95ddd -r 33222880db79 Slide/prosym.html
--- a/Slide/prosym.html Sat Jan 20 23:52:11 2018 +0900
+++ b/Slide/prosym.html Sun Jan 21 00:05:37 2018 +0900
@@ -86,7 +86,7 @@
@@ -216,10 +216,26 @@
+
+
Interface の実装例
+
+
__code pushSingleLinkedStack(struct SingleLinkedStack* stack,
+ union Data* data, __code next(...)) {
Element* element = new Element();
element->next = stack->top;
element->data = data;
@@ -376,13 +400,20 @@
そこで Context から必要なデータを取り出して Code Gear に接続する、メタレベルの stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。
-__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
+
+
+
+
+
stub Code Gear の例
+
__code clearSingleLinkedStack(struct Context *context,
+ struct SingleLinkedStack* stack,enum Code next) {
stack->top = NULL;
goto meta(context, next);
}
__code clearSingleLinkedStack_stub(struct Context* context) {
- SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
+ SingleLinkedStack* stack =
+ (SingleLinkedStack*)GearImpl(context, Stack, stack);
enum Code next = Gearef(context, Stack)->next;
goto clearSingleLinkedStack(context, stack, next);
}
@@ -406,7 +437,7 @@
+
+
生成された stub Code Gear
+
+
__code clearSingleLinkedStack(struct Context *context,
+ struct SingleLinkedStack* stack,enum Code next) {
stack->top = NULL;
goto meta(context, next);
}
__code clearSingleLinkedStack_stub(struct Context* context) {
- SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
+ SingleLinkedStack* stack =
+ (SingleLinkedStack*)GearImpl(context, Stack, stack);
enum Code next = Gearef(context, Stack)->next;
goto clearSingleLinkedStack(context, stack, next);
}
@@ -434,7 +473,6 @@
Context の生成
- - Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。
- generate_context は context.h から Data Gear、generate_stub から生成されたファイルから Code Gear を取得し、以下を生成する。
- Code/Data Gear を enum で定義した enumCode.h、enumData.h
@@ -445,7 +483,7 @@
-
+
diff -r 6df75cb95ddd -r 33222880db79 Slide/prosym.md
--- a/Slide/prosym.md Sat Jan 20 23:52:11 2018 +0900
+++ b/Slide/prosym.md Sun Jan 21 00:05:37 2018 +0900
@@ -185,8 +185,13 @@
stack->clear = C_clearSingleLinkedStack;
return stack;
}
+```
-__code pushSingleLinkedStack(struct SingleLinkedStack* stack, union Data* data, __code next(...)) {
+# Interface の実装例
+
+```impl
+__code pushSingleLinkedStack(struct SingleLinkedStack* stack,
+ union Data* data, __code next(...)) {
Element* element = new Element();
element->next = stack->top;
element->data = data;
@@ -209,14 +214,17 @@
- しかし、Meta Data Gear である Context をノーマルレベルの Code Gear から直接アクセスするのはよろしくない。
- そこで Context から必要なデータを取り出して Code Gear に接続する、メタレベルの stub Code Gear を定義し、これを介して間接的に必要な Data Gear にアクセスする。
+# stub Code Gear の例
```stub
-__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
+__code clearSingleLinkedStack(struct Context *context,
+ struct SingleLinkedStack* stack,enum Code next) {
stack->top = NULL;
goto meta(context, next);
}
__code clearSingleLinkedStack_stub(struct Context* context) {
- SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
+ SingleLinkedStack* stack =
+ (SingleLinkedStack*)GearImpl(context, Stack, stack);
enum Code next = Gearef(context, Stack)->next;
goto clearSingleLinkedStack(context, stack, next);
}
@@ -238,14 +246,18 @@
- Code Gear の引数と interface を照らし合わせ、Gearef または GearImpl を決定する。
- cbc ファイルの Code Gear から、生成した stub Code Gear を加えたファイルを生成する。
+# 生成された stub Code Gear
+
```stub
-__code clearSingleLinkedStack(struct Context *context,struct SingleLinkedStack* stack,enum Code next) {
+__code clearSingleLinkedStack(struct Context *context,
+ struct SingleLinkedStack* stack,enum Code next) {
stack->top = NULL;
goto meta(context, next);
}
__code clearSingleLinkedStack_stub(struct Context* context) {
- SingleLinkedStack* stack = (SingleLinkedStack*)GearImpl(context, Stack, stack);
+ SingleLinkedStack* stack =
+ (SingleLinkedStack*)GearImpl(context, Stack, stack);
enum Code next = Gearef(context, Stack)->next;
goto clearSingleLinkedStack(context, stack, next);
}
@@ -253,14 +265,13 @@
# Context の生成
-- Context は Meta Data Gear に相当し、Code Gear や Data Gear を管理している。
- generate_context は context.h から Data Gear、generate_stub から生成されたファイルから Code Gear を取得し、以下を生成する。
- Code/Data Gear を enum で定義した enumCode.h、enumData.h
- 取得した Code/Data Gear から Context の生成を行う target-context
- Context を生成する際の Data Gear の Allocation を行う dataGearInit.c
-
+
# 今後の課題