Mercurial > hg > Document > Growi
changeset 25:c25e1386e469
backup 2021-01-18
author | autobackup |
---|---|
date | Mon, 18 Jan 2021 00:10:03 +0900 |
parents | f0bc0289de97 |
children | f0d19eb29616 |
files | user/anatofuz/note/2021/01/17.md |
diffstat | 1 files changed, 391 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/user/anatofuz/note/2021/01/17.md Mon Jan 18 00:10:03 2021 +0900 @@ -0,0 +1,391 @@ +# 2021/01/17 + +```shell ++kajika+anatofuz$ perl generate_stub.pl --debug examples/generics_test/main.cbc > /dev/null +{ + createTask [ + [0] "loopCounter", + [1] "taskManager" + ], + initDataGears [ + [0] "loopCounter", + [1] "taskManager" + ], + prevTask [ + [0] "loopCounter" + ] +} +Use of uninitialized value $ntype in lcfirst at generate_stub.pl line 823. +Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 825. +Use of uninitialized value $ntype in hash element at generate_stub.pl line 827. +Use of uninitialized value $p in string eq at generate_stub.pl line 854. +Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 855. +Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 909. +Use of uninitialized value $p in string eq at generate_stub.pl line 854. +Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 855. +Use of uninitialized value $pType in substitution (s///) at generate_stub.pl line 859. +Use of uninitialized value $pType in pattern match (m//) at generate_stub.pl line 906. +Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 909. +{ + createTask [ + [0] "loopCounter", + [1] "taskManager" + ], + initDataGears [ + [0] "loopCounter", + [1] "taskManager" + ], + prevTask [ + [0] "loopCounter" + ], + shutdown [ + [0] "taskManager" + ] +} +``` + + +`%dataGearVarType`はgenerateStubArgsでしか呼ばれていないっぽい + + +```shell ++kajika+anatofuz$ perl generate_stub.pl --debug examples/generics_test/main.cbc +[getDataGear] match 175 : #interface "StackGenerics.h" +[interfacepath] +"/home/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/interface/StackGenerics.h" +[getDataGear] match 137 : typedef struct StackGenerics <T> { +[getDataGear] match 333 : __code clear(Impl* stack,__code next(...)); +[getDataGear] match 333 : __code push(Impl* stack,T* data, __code next(...)); +[getDataGear] match 333 : __code pop(Impl* stack, __code next(T* data, ...)); +[getDataGear] match 333 : __code pop2(Impl* stack, __code next(T* data, T* data1, ...)); +[getDataGear] match 333 : __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); +[getDataGear] match 333 : __code get(Impl* stack, __code next(T* data, ...)); +[getDataGear] match 333 : __code get2(Impl* stack, __code next(T* data, T* data1, ...)); +[getDataGear] match 333 : __code next(...); +[getDataGear] match 333 : __code whenEmpty(...); +[getDataGear] match 315 : } StackGenerics; +[getDataGear] match 342 : } StackGenerics; +[getCodeGear] match 389 : typedef struct StackGenerics <T> { +[getCodeGear] match 394 : __code clear(Impl* stack,__code next(...)); +[getCodeGear] match 394 : __code push(Impl* stack,T* data, __code next(...)); +[getCodeGear] match 394 : __code pop(Impl* stack, __code next(T* data, ...)); +[getCodeGear] match 394 : __code pop2(Impl* stack, __code next(T* data, T* data1, ...)); +[getCodeGear] match 394 : __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); +[getCodeGear] match 394 : __code get(Impl* stack, __code next(T* data, ...)); +[getCodeGear] match 394 : __code get2(Impl* stack, __code next(T* data, T* data1, ...)); +[getCodeGear] match 394 : __code next(...); +[getCodeGear] match 394 : __code whenEmpty(...); +[getDataGear] match 175 : #interface "Interger.h" +[interfacepath] +undef +[getDataGear] match 206 : __code gmain(){ +[getCodeGear] match 423 : __code gmain(){ +[getDataGear] match 240 : StackGenerics<Integer>* generics_list = createStackGenericsImpl(); +[getDataGear] match 240 : Interger* intA = NEW(Interger); +[getDataGear] match 250 : goto generics_list->push(intA, shutdown); +[getDataGear] match 175 : #interface "TaskManager.h" +[interfacepath] +"/home/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/TaskManager.h" +[getDataGear] match 137 : typedef struct TaskManager<>{ +[getDataGear] match 333 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getDataGear] match 333 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getDataGear] match 333 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getDataGear] match 333 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 333 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 333 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getDataGear] match 333 : __code next(...); +[getDataGear] match 333 : __code next1(...); +[getDataGear] match 315 : } TaskManager; +[getDataGear] match 342 : } TaskManager; +[getCodeGear] match 389 : typedef struct TaskManager<>{ +[getCodeGear] match 394 : __code spawn(Impl* taskManager, struct Context* task, __code next(...)); +[getCodeGear] match 394 : __code spawnTasks(Impl* taskManagerImpl, struct Element* taskList, __code next1(...)); +[getCodeGear] match 394 : __code setWaitTask(Impl* taskManagerImpl, struct Context* task, __code next(...)); +[getCodeGear] match 394 : __code shutdown(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 394 : __code incrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 394 : __code decrementTaskCount(Impl* taskManagerImpl, __code next(...)); +[getCodeGear] match 394 : __code next(...); +[getCodeGear] match 394 : __code next1(...); +[getDataGear] match 175 : #interface "StackGenerics.h" +[interfacepath] +"/home/anatofuz/src/firefly/hg/Gears/Gears/src/parallel_execution/interface/StackGenerics.h" +[getDataGear] match 137 : typedef struct StackGenerics <T> { +[getDataGear] match 333 : __code clear(Impl* stack,__code next(...)); +[getDataGear] match 333 : __code push(Impl* stack,T* data, __code next(...)); +[getDataGear] match 333 : __code pop(Impl* stack, __code next(T* data, ...)); +[getDataGear] match 333 : __code pop2(Impl* stack, __code next(T* data, T* data1, ...)); +[getDataGear] match 333 : __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); +[getDataGear] match 333 : __code get(Impl* stack, __code next(T* data, ...)); +[getDataGear] match 333 : __code get2(Impl* stack, __code next(T* data, T* data1, ...)); +[getDataGear] match 333 : __code next(...); +[getDataGear] match 333 : __code whenEmpty(...); +[getDataGear] match 315 : } StackGenerics; +[getDataGear] match 342 : } StackGenerics; +[getCodeGear] match 389 : typedef struct StackGenerics <T> { +[getCodeGear] match 394 : __code clear(Impl* stack,__code next(...)); +[getCodeGear] match 394 : __code push(Impl* stack,T* data, __code next(...)); +[getCodeGear] match 394 : __code pop(Impl* stack, __code next(T* data, ...)); +[getCodeGear] match 394 : __code pop2(Impl* stack, __code next(T* data, T* data1, ...)); +[getCodeGear] match 394 : __code isEmpty(Impl* stack, __code next(...), __code whenEmpty(...)); +[getCodeGear] match 394 : __code get(Impl* stack, __code next(T* data, ...)); +[getCodeGear] match 394 : __code get2(Impl* stack, __code next(T* data, T* data1, ...)); +[getCodeGear] match 394 : __code next(...); +[getCodeGear] match 394 : __code whenEmpty(...); +[getDataGear] match 175 : #interface "Interger.h" +[interfacepath] +undef +[getDataGear] match 206 : __code initDataGears(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[getDataGear] match 206 : __code prevTask(struct LoopCounter* loopCounter) { +[getDataGear] match 206 : __code createTask(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[getDataGear] match 240 : StackGenerics<Integer>* generics_list = createStackGenericsImpl(); +[getDataGear] match 240 : Interger* intA = NEW(Interger); +[getDataGear] match 250 : goto generics_list->push(intA, shutdown); +[getDataGear] match 206 : __code shutdown(struct TaskManager* taskManager) { +[getDataGear] match 250 : goto taskManager->shutdown(exit_code); +[getDataGear] match 206 : __code shutdown_stub(struct Context* context) { +[generateDataGear] match 794 : #include <stdio.h> +[generateDataGear] match 794 : #include <string.h> +[generateDataGear] match 794 : #include <stdlib.h> +[generateDataGear] match 794 : #include <unistd.h> +[generateDataGear] match 794 : #include <unistd.h> +[generateDataGear] match 660 : #interface "TaskManager.h" +[generateDataGear] match 660 : #interface "StackGenerics.h" +[generateDataGear] match 660 : #interface "Interger.h" +[generateDataGear] match 665 : #include "../../../context.h" +[generateDataGear] match 794 : +[generateDataGear] match 794 : int cpu_num = 1; +[generateDataGear] match 794 : int length = 102400; +[generateDataGear] match 794 : int split = 8; +[generateDataGear] match 794 : int* array_ptr; +[generateDataGear] match 794 : int gpu_num = 0; +[generateDataGear] match 794 : int CPU_ANY = -1; +[generateDataGear] match 794 : int CPU_CUDA = -1; +[generateDataGear] match 794 : +[generateDataGear] match 684 : __code initDataGears(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[ + [0] "initDataGears", + [1] "loopCounter", + [2] "LoopCounter", + [3] "*", + [4] "loopCounter", + [5] { + genConstructor undef, + implementation undef, + interface undef, + isImpl undef, + parsedInterfaceInfo undef + }, + [6] 0 +] +[ + [0] "initDataGears", + [1] "taskManager", + [2] "TaskManager", + [3] "*", + [4] "taskManager", + [5] { + genConstructor undef, + implementation undef, + interface undef, + isImpl undef, + parsedInterfaceInfo undef + }, + [6] 0 +] +[generateDataGear] match 1043 : // loopCounter->tree = createRedBlackTree(context); +[generateDataGear] match 1043 : loopCounter->i = 0; +[generateDataGear] match 1043 : taskManager->taskManager = (union Data*)createTaskManagerImpl(context, cpu_num, gpu_num, 0); +[generateDataGear] match 981 : goto prevTask(); +[generateDataGear] match 1040 : } +[generateDataGear] match 1064 : } +[generateDataGear] match 794 : +[generateDataGear] match 684 : __code prevTask(struct LoopCounter* loopCounter) { +[ + [0] "prevTask", + [1] "loopCounter", + [2] "LoopCounter", + [3] "*", + [4] "loopCounter", + [5] { + genConstructor undef, + implementation undef, + interface undef, + isImpl undef, + parsedInterfaceInfo undef + }, + [6] 0 +] +[generateDataGear] match 1043 : printf("cpus:\t\t%d\n", cpu_num); +[generateDataGear] match 1043 : printf("gpus:\t\t%d\n", gpu_num); +[generateDataGear] match 1043 : printf("length:\t\t%d\n", length); +[generateDataGear] match 1043 : printf("length/task:\t%d\n", length/split); +[generateDataGear] match 1043 : /* puts("queue"); */ +[generateDataGear] match 1043 : /* print_queue(context->data[ActiveQueue]->queue.first); */ +[generateDataGear] match 1043 : /* puts("tree"); */ +[generateDataGear] match 1043 : /* print_tree(context->data[Tree]->tree.root); */ +[generateDataGear] match 1043 : /* puts("result"); */ +[generateDataGear] match 981 : goto createTask(); +[generateDataGear] match 1040 : } +[generateDataGear] match 1064 : } +[generateDataGear] match 794 : +[generateDataGear] match 794 : +[generateDataGear] match 684 : __code createTask(struct LoopCounter* loopCounter, struct TaskManager* taskManager) { +[ + [0] "createTask", + [1] "loopCounter", + [2] "LoopCounter", + [3] "*", + [4] "loopCounter", + [5] { + genConstructor undef, + implementation undef, + interface undef, + isImpl undef, + parsedInterfaceInfo undef + }, + [6] 0 +] +[ + [0] "createTask", + [1] "taskManager", + [2] "TaskManager", + [3] "*", + [4] "taskManager", + [5] { + genConstructor undef, + implementation undef, + interface undef, + isImpl undef, + parsedInterfaceInfo undef + }, + [6] 0 +] +[generateDataGear] match 1043 : StackGenerics<Integer>* generics_list = createStackGenericsImpl(); +[generateDataGear] match 1034 : Interger* intA = NEW(Interger); +[generateDataGear] match 1043 : intA->value = 90; +[generateDataGear] match 799 : goto generics_list->push(intA, shutdown); +Use of uninitialized value $ntype in lcfirst at generate_stub.pl line 826. +Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 828. +Use of uninitialized value $ntype in hash element at generate_stub.pl line 830. +Use of uninitialized value $p in string eq at generate_stub.pl line 857. +Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 858. +Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 912. +Use of uninitialized value $p in string eq at generate_stub.pl line 857. +Use of uninitialized value $p in substitution (s///) at generate_stub.pl line 858. +Use of uninitialized value $pType in substitution (s///) at generate_stub.pl line 862. +Use of uninitialized value $pType in pattern match (m//) at generate_stub.pl line 909. +Use of uninitialized value $ntype in concatenation (.) or string at generate_stub.pl line 912. +[generateDataGear] match 1040 : } +[generateDataGear] match 1064 : } +[generateDataGear] match 794 : +[generateDataGear] match 684 : __code shutdown(struct TaskManager* taskManager) { +[ + [0] "shutdown", + [1] "taskManager", + [2] "TaskManager", + [3] "*", + [4] "taskManager", + [5] { + genConstructor undef, + implementation undef, + interface undef, + isImpl undef, + parsedInterfaceInfo undef + }, + [6] 0 +] +[generateDataGear] match 799 : goto taskManager->shutdown(exit_code); +[generateDataGear] match 1040 : } +[generateDataGear] match 1064 : } +[generateDataGear] match 794 : +[generateDataGear] match 684 : __code shutdown_stub(struct Context* context) { +[generateDataGear] match 1064 : } +[generateDataGear] match 794 : +[generateDataGear] match 794 : +[generateDataGear] match 794 : +[generateDataGear] match 794 : void init(int argc, char** argv) { +[generateDataGear] match 794 : for (int i = 1; argv[i]; ++i) { +[generateDataGear] match 794 : if (strcmp(argv[i], "-cpu") == 0) +[generateDataGear] match 794 : cpu_num = (int)atoi(argv[i+1]); +[generateDataGear] match 794 : else if (strcmp(argv[i], "-l") == 0) +[generateDataGear] match 794 : length = (int)atoi(argv[i+1]); +[generateDataGear] match 794 : else if (strcmp(argv[i], "-s") == 0) +[generateDataGear] match 794 : split = (int)atoi(argv[i+1]); +[generateDataGear] match 794 : else if (strcmp(argv[i], "-cuda") == 0) { +[generateDataGear] match 794 : gpu_num = 1; +[generateDataGear] match 794 : CPU_CUDA = 0; +[generateDataGear] match 794 : } +[generateDataGear] match 794 : } +[generateDataGear] match 794 : } +[generateDataGear] match 794 : +[generateDataGear] match 634 : int main(int argc, char** argv) { +[generateDataGear] match 1053 : goto initDataGears(); +[generateDataGear] match 1064 : } +[generateDataGear] match 794 : +``` + + +``` + DB<19> n +main::generateDataGear(generate_stub.pl:821): +821: if ($v eq $next || $v eq "O_$next") { + DB<19> n +main::generateDataGear(generate_stub.pl:826): +826: if (!defined $ntype) { + DB<19> p $ntype +undef +undef + + DB<20> n +main::generateDataGear(generate_stub.pl:827): +827: $ntype = $localVarType{$next}; + DB<20> p %localVarType +{ + intA "Interger" +} +{ + intA "Interger" +} + + DB<21> p $next +"generics_list" +"generics_list" + + DB<22> p +Not enough arguments for Data::Printer::p at (eval 81)[/home/anatofuz/.plenv/versions/5.32.0/lib/perl5/5.32.0/perl5db.pl:738] line 2, at EOF + + DB<23> p $currentCodeGearInfo->{localVar}->{$next} +"StackGenerics" +"StackGenerics" +``` + + +`$currentCodeGearInfo`がちゃんと動いていそう + + +```perl +#!/usr/bin/env perl +use strict; +use warnings; +use DDP {deparse => 1}; + + +my $line = 'StackGenerics<Integer>* generics_list = createStackGenericsImpl();'; + +if ($line =~ /^\s*(\w+)<(.+)>\*?\s*(\w+)\s*=\s*(.+)\(?/) { + + p $1; + p $2; + p $3; + p $line; +} + +``` + + +# interfaceとgenerics + +- interfaceの実装がgenericsをどう使っているかが問題 + - interfaceと同じくgenerics( typed varibaleのまま) + - 明示的に何かを実装してしまっているケース + - これは許容しない?